5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Delphi / FireDAC Microsoft SQL Server 2019 Expressで、画像の保存と取り出しのテストをしてみました。

Posted at

はじめに

Delphi Advent Calendar 2022 12/05と12/07の記事のMicrosoft SQL Server 2019 Express版です。

1. Ubuntu20.04 はローカルの機器にインストール

2. Microsoft SQL Server 2019 Express に事前に test_1 データベースを作成00_ver.png

3. Microsoft SQL Server 2019 Expressでは、データ型は Image です

4. Delphiで、uses JPEG, GIFImg, PNGImage ; //使用する画像を宣言

Delphi 10.2でテストしています。
01_ide.png


以下サンプルコード

画像データの追加のサンプルコード

FD_MSSQL2019_B_Unit.pas
procedure TForm1.SpeedButton6Click(Sender: TObject);
var
  SQLstmt:String;
begin
  with FDConnection1 do
  try
    SQLstmt :=' INSERT INTO '
             +' test_tbl ( ts_no  , tsblob ) '
             +'	VALUES ('
             +' :ts_no , :tsblob '
             + ')';
    FDQuery1.SQL.Clear;
    FDQuery1.SQL.Text:= sqlstmt;
    FDQuery1.ParamByName('ts_no').AsInteger:=StrToInt( Edit_TS_NO.Text );
    FDQuery1.ParamByName('tsblob').LoadFromFile( Edit_Files.Text ,ftBlob);
    FDQuery1.ExecSQL();
    ShowMessage('登録しました');
  finally
    FDQuery1.Close;
  end;

end;

画像データの表示のサンプルコード

FD_MSSQL2019_B_Unit.pas
procedure TForm1.SpeedButton7Click(Sender: TObject);
var
  SQLstmt:String;
begin
  with FDConnection1 do
  try
    SQLstmt := 'SELECT * FROM test_tbl '
            +  'WHERE ts_no = :ts_no';
    FDQuery1.SQL.Clear;
    FDQuery1.SQL.Text:= sqlstmt;
    FDQuery1.ParamByName('ts_no').AsInteger:=StrToInt(Edit_ts_no.Text);
    FDQuery1.Open();
    if not FDQuery1.Eof then
    begin
      Edit_ts_no.Text  :=IntToStr(FDQuery1.FieldByName('ts_no').AsInteger);
      Image1.Picture.Assign( TBLOBField(FDQuery1.FieldByName('tsblob') ) );
    end;
  finally
    FDQuery1.Close;
  end;
end;

テーブルの作成のサンプルコード

FD_MSSQL2019_B_Unit.pas
procedure TForm1.SpeedButton2Click(Sender: TObject);
var
  sqlstmt:string;
begin
  sqlstmt:='CREATE TABLE TEST_TBL '+
  '('+
  'TS_NO      INTEGER  not null,'+
  'TS_NAME    VARChar(30) ,'+
  'TS_QTY     DECIMAL(14,2) Default 0 ,'+
  //'TS_BLOB    BLOB ,'+
  //'TS_BLOB    Binary ,'+
  //'TS_BLOB    VarBinary ,'+
  'TSBLOB     Image ,'+
  'TSBLOB1  VARBINARY(MAX)  '+ //こちらも使用できるようです
  'primary key(TS_NO)'+
  ')';
  if FDConnection1.Connected=true then
  begin
    try
      FDQuery1.SQL.Clear;
      FDQuery1.SQL.Add(sqlstmt);
      FDQuery1.ExecSQL();
      ShowMessage('CREATE TABLE');
    except
      on E: EFDDBEngineException do
      ShowMessage(E.ClassName+' error raised, with message : '+E.Message);
    end;
  end
  else ShowMessage('Connected ERR');
end;

今回使用した、 sqlncli11.dll は 2014 のものですが、2019で、接続可能でした。

SQL Server 2022 Expressは、現時点で、手元にインストールできなかったので、2019でテストしました。

このソースのダウロードは、ここからできます

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?