[SQL] SQL 매개 변수를 사용하여 (이미지 일명) 삽입 / 업데이트 TBlobfield
SQLSQL 매개 변수를 사용하여 (이미지 일명) 삽입 / 업데이트 TBlobfield
나는 SQL을 사용하여 데이터베이스에 저장하는 이미지를 원하지만 일에 그것을 얻을 것 캔트 :
qry.SQL.Clear;
qry.Sql.Add('update tbl set pic = :blobVal where id = :idVal');
qry.Parameters.ParamByName('idVal')._?:=1;
.PARAM은 가지고 있지만 .PARAM이 TADOquery와 호환되지 않습니다처럼 또한 .Parameters 더 .asinteger이 없습니다 - 나는 시도 해결하기 위해 :
a_TParameter:=qry.Parameters.CreateParameter('blobval',ftBlob,pdinput,SizeOf(TBlobField),Null);
a_TParam.Assign(a_TParameter);
a_TParam.asblob:=a_Tblob;
qry.ExecSql;
이 또한 나던 일 :
qry.SQL.Clear;
qry.Sql.Add('update tbl set pic = :blobVal where id = 1')
qry.Parameters.ParamByName('blobVal').LoadFromStream(img as a_TFileStream,ftGraphic);//ftblob
//or
qry.Parameters.ParamByName('blobVal').LoadFromFile('c:\sample.jpg',ftgrafic);//ftblob
qry.ExecSql;
해결법
-
==============================
1.뭔가를해야합니다
뭔가를해야합니다
qry.Parameters.Clear; qry.Parameters.AddParameter.Name := 'blobVal'; qry.Parameters.ParamByName('blobVal').LoadFromFile('c:\sample.jpg', ftBlob); // or load from stream: // qry.Parameters.ParamByName('blobVal').LoadFromStream(MyStream, ftBlob); qry.Parameters.AddParameter.Name := 'idVal'; qry.Parameters.ParamByName('idVal').Value := 1; qry.SQL.Text := 'update tbl set pic = :blobVal where id = :idVal'; qry.ExecSQL;
DB를에서 BLOB의 뒷면을 읽으려면 :
qry.SQL.Text := 'select id, pic from tbl where id = 1'; qry.Open; TBlobField(qry.FieldByName('pic')).SaveToFile('c:\sample_2.jpg');
-
==============================
2.나는 나사로하지 델파이를 사용하고 있지만, 나는 그것의 일반적으로 동일한 구문을 것 같아요. 그렇다면, 여기 kobiks 제안에 약간의 개선이다 :
나는 나사로하지 델파이를 사용하고 있지만, 나는 그것의 일반적으로 동일한 구문을 것 같아요. 그렇다면, 여기 kobiks 제안에 약간의 개선이다 :
SQL.Text이 매개 변수에 할당 값을 시도하기 전에 지정된 경우 매개 변수가 자동으로 추가됩니다. 이 같이 :
qry.Parameters.Clear; qry.SQL.Text := 'update tbl set pic = :blobVal where id = :idVal'; qry.Parameters.ParamByName('blobVal').LoadFromFile('c:\sample.jpg', ftBlob); qry.Parameters.ParamByName('idVal').Value := 1; qry.ExecSQL;
-
==============================
3.나는이 질문에 대한 답으로 쓴 델파이는 SQL 데이터베이스에 BLOB으로 포장 된 레코드를 저장 이는 현재 기술 때문에 아마도 잘못, 중복으로 플래그가 주석에 설명 된대로 OP에서 사용하는 올바른 것으로 보인다. 그래서, 문제의 원인은 다른 곳에 거짓말 수 있습니다.
나는이 질문에 대한 답으로 쓴 델파이는 SQL 데이터베이스에 BLOB으로 포장 된 레코드를 저장 이는 현재 기술 때문에 아마도 잘못, 중복으로 플래그가 주석에 설명 된대로 OP에서 사용하는 올바른 것으로 보인다. 그래서, 문제의 원인은 다른 곳에 거짓말 수 있습니다.
복제 플래그가 제거됩니다 경우에, 나는 거기에이 대답을 다시 게시합니다.
다음 코드는 아래와 같이 정의는 SQL Server 테이블에 나를 위해 잘 작동합니다.
후속 픽처의 부호화시에 참조 화상의 데이터는 테이블에 저장하고 올바르게이 rec2로 다시 읽습니다.
(* MS Sql Server DDL CREATE TABLE [blobs] ( [id] [int] NOT NULL , [blob] [image] NULL , CONSTRAINT [PK_blobs] PRIMARY KEY CLUSTERED ( [id] ) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO *) TForm1 = class(TForm) ADOConnection1: TADOConnection; qBlobInsert: TADOQuery; qBlobRead: TADOQuery; Button1: TButton; procedure Button1Click(Sender: TObject); [...] type TMyRecord = packed record FontName: string[30]; FontSize: word; FontColor: integer; FontStyle: word; Attachement: string[255]; URL: string[255]; end; const scInsert = 'insert into blobs(id, blob) values(:id, :blob)'; scSelect = 'select * from blobs where id = %d'; procedure TForm1.Button1Click(Sender: TObject); begin TestInsert; end; procedure TForm1.TestInsert; var Rec1, Rec2 : TMyRecord; MS : TMemoryStream; begin FillChar(Rec1, SizeOf(Rec1), #0); FillChar(Rec2, SizeOf(Rec2), #0); Rec1.FontName := 'AName'; Rec1.URL := 'AUrl'; MS := TMemoryStream.Create; try // Save Rec1 using an INSERT statement MS.Write(Rec1, SizeOf(Rec1)); MS.Seek(0, soFromBeginning); qBlobInsert.Parameters[0].Value := 1; qBlobInsert.Parameters[1].LoadFromStream(MS, ftBlob); qBlobInsert.SQL.Text := scInsert; qBlobInsert.ExecSQL; // Read saved data back into Rec2 qBlobRead.SQL.Text := Format(scSelect, [1]); qBlobRead.Open; MS.Clear; TBlobField(qBlobRead.FieldByName('blob')).SaveToStream(MS); MS.Seek(0, soFromBeginning); MS.Read(Rec2, MS.Size - 1); Caption := Rec2.FontName + ':' + Rec2.URL; finally MS.Free; end; end;
DFM에서 추출
object qBlobInsert: TADOQuery Connection = ADOConnection1 Parameters = < item Name = 'id' DataType = ftInteger Value = Null end item Name = 'blob' DataType = ftBlob Value = Null end> Left = 56 Top = 32 end
from https://stackoverflow.com/questions/19115821/insert-update-tblobfield-aka-image-using-sql-parameters by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 비주얼 C #을 사용하여 SQL 데이터베이스에 이미지를 추가 (0) | 2020.07.14 |
---|---|
[SQL] 여러 열에 대한 고유 값을 선택 (0) | 2020.07.14 |
[SQL] SQL에서 정렬되지 않은 결과 (0) | 2020.07.14 |
[SQL] 스칼라 반환 함수를 호출 할 때 ExecuteScalar는 항상 널 (null)을 반환 (0) | 2020.07.14 |
[SQL] 오라클 10 : BLOB 데이터에 채우기에 HEXTORAW 사용 (0) | 2020.07.14 |