2010-01-11 4 views
1

SQL 명령을 사용하여 데이터베이스에 이미지를 저장하고 싶습니다. TBlobField.LoadFromFile 등을 사용하는 다른 방법을 알고 있지만 데이터베이스를 업데이트하기 위해이 작업을 수행해야하는 이유가 있습니다.SQL을 사용하여 TBlobField의 값을 스트링

내가 어떻게해야하는지에 대한 제안/조언

나는 (지금 멀리 책상에서)이 시도한 적이 있지만, 매개 변수가 작동 할

답변

5

하기 Sandeep? 예를 들면 :

Query.Sql.Clear; 
Query.Sql.Add('update myTable set myField = :blobVal where myId = :idVal'); 
Query.ParamByName('idVal').AsInteger := SomeId; 
Query.ParamByName('blobVal').LoadFromFile(.... 
//or 
Query.ParamByName('blobVal').LoadFromStream(.... 
Query.ExecSql; 

이것은 내가 제대로 이해한다면, 당신은 대신 SQL-발전 시스템의 일종을 가지고 당신은 SQL (보다는 .Edit 등 방법)을 사용하여 여전히 BLOB 데이터

0

을 삽입 할 수 있습니다 데이터 세트를 사용하고 BLOB 필드에 대한 INSERT 또는 UPDATE를 올바르게 수행하도록 SQL을 생성하는 방법을 알고 싶습니다.

이미지를 문자열로 직렬화하는 방법이 필요합니다. 예를 들어 : 그 준비가되면

function ImageToString(image: TImage): string; 
var 
    stream: TStringStream; 
begin 
    stream := TStringStream.Create; 
    try 
    image.SaveToStream(stream); 
    result := image.DataString; 
    finally 
    stream.Free; 
    end; 
end; 

set IMAGE_FIELD = $IMAGE$처럼, 당신의 SQL에 뭔가를 토큰을 넣고, 다음 이미지의 캐릭터 라인 표현으로 $IMAGE$ 토큰을 대체 할 StringReplace와를 사용합니다.

또는 Graza가 제안한 매개 변수를 사용하여 작업중인 시스템에서 매개 변수를 지원할 수 있습니다.

+0

난 당신이 제안하지만, 이미지를 위해 만든 문자열을 좋아하지 않는 SQL 명령은, 그것의 일부 시세 및 다른 문자를 가지고 일을했습니다. 나는 파일을 사용하여 똑같은 것을 시도해 봤지만 정상적으로 작동한다. –

+0

오, 예, StringReplace에서 QuotedStr()을 사용해야합니다. 또는 전체 BLOB 문자열을 16 진수로 변환하고 앞에 "0x"를 붙이는 루틴을 통해 실행하십시오. (모든 DBMS에서 작동하지 않을 수 있습니다. –

0

이 시도 :

Query.Sql.Clear; 
Query.Sql.Add('update myTable set myField = :blobVal where myId = :idVal'); 
Query.ParamByName('idVal').AsInteger := SomeId; 
Query.Params.CreateParam(ftBlob,'blobVal',ptInput).LoadFromFile('c:\path.png',ftGraphic); 
Query.ExecSql; 
0
jpg := TJPEGImage.Create; 
jpg.Assign(Image1.Picture.Graphic); 
strm := TMemoryStream.Create; 
strm.Position:= 0; 
jpg.SaveToStream(strm); 
IBSQL1.Close; 
IBSQL1.SQL.Clear; 
IBSQL1.SQL.Add('INSERT INTO ENTRY(FORMNUM, JPG) VALUES('); 
IBSQL1.SQL.Add( quotedstr(edtFormNum.Text)); 
IBSQL1.SQL.Add(', :JPG'); 
IBSQL1.SQL.Add(')'); 
IBSQL1.Params.ByName('JPG').LoadFromStream(strm); 
IBSQL1.ExecQuery; 
strm.Free; 
jpg.Free; 
관련 문제