2016-11-01 11 views
3

私のPCから.bmpをblobフィールドを含むデータベースに保存しようとしています。PCからデータベースblobフィールドに.bmpを保存しようとしています

私は現在、ここからのコードで働いています:

How to insert image into database using TADOQuery Component Only

私は新しいフォームを作成し、そこに必要なコンポーネントを追加しました。それは次のものが含ま enter image description here

  • :3 TButton、1 TOpenDialogと1 TImage
  • ボタンSalveaza保存Button3あるとModalResultを持って

    これは、フォームがどのように見えるかですmrOk

  • ボタンIncarca Im agineロードイメージButton1
  • ボタンをキャンセルさCancelプロパティがチェックさとmrAbort

からModalResultセットIncarcaはボタン1を)想像するコードボタンを持っている、Button2ですこれはです:

procedure TaddImagineForm.Button1Click(Sender: TObject); 
begin 
    if OpenDialog1.Execute then 
    begin 
     Image1.Picture.LoadFromFile(OpenDialog1.FileName); 
    end; 
end; 

Salveazaボタン3)という名前のボタンのコードは次のとおりです。

私は私は他のものと一緒に、 Data moduleに位置しています(comenziQuery という名前)を使用してい
procedure TaddImagineForm.Button3Click(Sender: TObject); 
var 
      Field: TBlobField; 
      Stream: TStream; 
begin 
      if dbmodule.comenziQuery.Active and (Image1.Picture.Graphic <> nil) then 
      begin 
      dbmodule.comenziQuery.Insert; 
      Field := TBlobField(dbmodule.comenziQuery.FieldByName('pscreen')); // ensure it ís a blob 
      Stream := dbmodule.comenziQuery.CreateBlobStream(Field, bmWrite); 
      try 
       Image1.Picture.Graphic.SaveToStream(Stream); 
      finally 
       Stream.Free; 
       dbmodule.comenziQuery.Post; 
      end; 
      end; 
end; 
  • TSQLQuerydbmodule(のようなDataSourceは、DataSetSQLConnectionなど...)データモジュールの名前は
  • データベース内の列を使用して、その.bmpイメージは、pscreenという名前で、mediumblobタイプに設定されています。

は何(ビューのおそらく私の初心者のポイントに)起こるべき

  • 今含まれている必要があり、選択した行のpscreenという名前blobフィールド。私はIncarcaは、私は、フォームを閉じる保存ボタンをクリックしますが、選択された行は、」doesnの後は、実際に

    • をhapenning何ボタン

    を想像してみて押すことによって、私のTOpenDialogで以前に選択したBMPそのBLOBフィールドのbmpイメージで更新されます。エラーなし、警告なし、何もありません。その行のフィールドはNULLのままです。彼は私が新しいレコードを追加挿入し、使用していることを指摘したコメントにDsmをへ

EDIT

おかげで、私が選択してるものを更新していません。 私はこの行を参照しています:dbmodule.comenziQuery.Insert; 私は選択しているレコードを更新するために何とかコードを変更する必要があります。

Delphi/SQLの初心者ですので、私は壁に頭を打つと正反対のことをしているように思えば謝罪します。私はRAD Studioの10シアトルを使用してい

データベースはMYSQLで、データベースコンポーネントがdbmoduleというデータモジュール上に位置しており、次のものが含まれている:TSimpleDataSetTSQLQueryTDataSourceTSQLConnection - 彼らはdbExpressコンポーネントです。

ありがとうございました!

+0

は、あなたが挿入を使用しているdbmodule.comenziQuery.PostとStream.Free – whosrdaddy

+0

を逆にしてみてください。これにより、追加のレコードがデータベースに追加されます。それはあなたがすることを意味しますか? – Dsm

+0

@Dsm - いいえ、私は基本的にデータベースに既に存在する行を更新しようとしています。具体的には、pscreenフィールドは現在nullです。そこにイメージを追加したいと思います。私はマウスで、dbgridで、イメージを追加してこのフォームを起動したい行を選択しています。すべての行にidという名前のフィールドにID番号が含まれていれば、それは役に立ちます。 – Petzy

答えて

0

次のコードでは、働いていたと私はちょうどDataSetを使用してクエリを使用して交換し、それはそれを解決したようだ

procedure TaddImagineForm.Button3Click(Sender: TObject); 
var 
      Field: TBlobField; 
      Stream: TStream; 
begin 
      dbmodule.comenziDataSet.Active := True; 
      if (Image1.Picture.Graphic <> nil) then 
      begin 
      dbmodule.comenziDataSet.Edit; 
      Field := TBlobField(dbmodule.comenziDataSet.FieldByName('pscreen')); // ensure it ís a blob 
      Stream := dbmodule.comenziDataSet.CreateBlobStream(Field, bmWrite); 
      try 
       Image1.Picture.Graphic.SaveToStream(Stream); 
      finally 
       Stream.Free; 
       dbmodule.comenziDataSet.Post; 
      end; 
      end; 
end; 


end. 

を必要な機能を提供することに成功した、また、/質問私のオリジナルのポストは間違っていました私は問題を混乱させてきたので。それでも、誰かが同じことをするのに良い。 Sertac Akyuzへ

おかげ

関連する問題