お世話になります。
以下の2点がよく判らず困っております。
いつも、初歩的な質問で恐縮です(^_^;)
1. ZQuery1.SQL.Text := 'INSERT INTO 内で変数の使用方法
なんとかSQLiteとDelphiを接続して、テーブルの作成および表示は
出来るようになりましたが、下記のEditテキストに入力した値を
データベースへ挿入する際の変数のセットの仕方がよく判りません。
色々ネットやヘルプを見ましたが・・・よく判りませんでした。
Edit1.text Name
Edit2.text Birth
Edit3.Text Addr
ZQuery1.SQL.Text := 'INSERT INTO AddressTBL'
+ '('
+ '"氏名", "生年月日", "住所"'
+ ')'
+ ' VALUES ('
+ '"山田太郎", "1995/01/22", "東京都品川区1-2-3"'
+ ');';
上記は直接値を入力する場合ですが、変数をセットする場合は
どのようにするのでしょうか?
2.GRIDに表示されたレコード部分をクリックした時にその行(横一列)の上記のを取り出す際のイベントは何でしょうか?
>2.GRIDに表示されたレコード部分をクリックした時にその行(横一列)の上記のを取り出す際のイベントは何でしょうか?
すいません、言葉が不足していました。
例えば、Gridに下記のデータが表示されているときに
2行目(山田花子の行)のどこかをダブルクリックしたら、山田花子の全ての
情報を取り出したいということです。その場合の、イベントは何なのでしょうか?
NO 氏 名 生年月日 住所
1 山田太郎 1995/01/22 東京都品川区1-2-3
2 山田花子 1996/02/22 東京都品川区1-2-4
3 山田一郎 1964/02/22 東京都品川区1-2-3
> 上記は直接値を入力する場合ですが、変数をセットする場合は
> どのようにするのでしょうか?
Noby さんが、前回の質問時に、参考にしたサイトに
10_ZeosLib における SQL 文のパラメータ設定方法 - ParamByName
http://mrxray.on.coocan.jp/Delphi/plSamples/564_ZeosLib_DelphiBerlin.htm#10
が、あるようです。
igyさん
いつもありがとうございます。
サイトの内容を元に作ってみましたが、
モジュール 'SqliteTest2.exe'のアドレス00651769でアドレス00000000
に対する読み取り違反がおきました。 と出ます。
どこが悪いのでしょうか?
---------------------------------
procedure TForm1.Button4Click(Sender: TObject);
begin
//念のため接続を切断してから設定
ZQuery1.Close;
ZConnection1.Disconnect;
ZConnection1.LoginPrompt := False;
ZConnection1.Protocol := 'sqlite-3';
ZConnection1.Database := ExpandFileName('AddressBook.db3');
ZConnection1.Connect;
ZConnection1.Disconnect;
ZQuery1.Close;
ZQuery1.Connection := ZConnection1;
//TZConnectionのPrepareSQLプロパティの値をTrueにする
ZConnection1.Properties.Clear;
ZConnection1.Properties.Add('PrepareSQL=True');
//パラメータのチェックありにする
ZQuery1.ParamCheck := True;
ZQuery1.SQL.Text := 'INSERT INTO AddressTBL SET [氏名] = :Name, [生年月日] = :Birth,[住所] = :Addr;';
//クエリのパラメータの設定
ZQuery1.ParamByName('Name').AsString := Edit1.Text;
ZQuery1.ParamByName('Birth').AsDateTime := StrToDateTime(Edit2.Text);
ZQuery1.ParamByName('Addr').AsString := Edit3.Text;
//更新クエリの実行
ZQuery1.ExecSQL;
}
end;
あまり詳しく見ていないのですが、
> ZConnection1.Connect;
> ZConnection1.Disconnect;
接続して、すぐ切断しているようです。
最初の質問のコードは多分,以下の Button1Click のコードではないかと思いますが,
http://mrxray.on.coocan.jp/Delphi/plSamples/566_ZeosLib_SQLite_DelphiBerlin.htm#list2
ここのコメントに
//コードでデータを作成
//数値以外は"(ダブルクォーテーション)で括る
と書いてあります.
ということは
+ '"山田太郎", "1995/01/22", "東京都品川区1-2-3"'
の住所の部分を,例えば LAddress という string 型で定義したとします.
すると以下のようになります.
つまり,コメントに書いてある通り,そのままということになります.
オン書きなので...
LAddress := '"東京都品川区1-2-3"';
+ '"山田太郎", "1995/01/22",' + LAddress
>つまり,コメントに書いてある通り,そのままということになります.
つまり,単なる文字列の単純な操作です.
以下のようにした方がスマートですね.
LAddress := QuotedStr('東京都品川区1-2-3');
Mr.XRAYさん
いつもサイトを参考にさせていただき感謝申し上げます。
直々にコメント下さり、恐縮です。
下記のように作り直して実行しますと、
SQL Error:SQL Logic error. と出てしまいます。
--------------------------------
Zenbu:=''''+'"'+Edit1.Text+'",'
+'"'+Edit2.Text+'",'
+'"'+Edit3.Text+'"'+'''';
Form1.Caption:=Zenbu;//→'"渋谷太郎", "1995/12/31", "東京都新宿区在住"' と正常に表示されています。
//exit;
ZQuery1.SQL.Text := 'INSERT INTO AddressTBL'
+ '('
+ '"氏名", "生年月日", "住所"'
+ ')'
+ ' VALUES ('
+ Zenbu
+ ');';
ZQuery1.ExecSQL;
>Form1.Caption:=Zenbu;//→'"渋谷太郎", "1995/12/31", "東京都新宿区在住"' と正常に表示されています。
正常ではないと思いますが...
以下のどちらが正常ですか ?
procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.Caption := 'ABC';
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Form1.Caption := '''ABC''';
end;
Edit1 に ABC という文字列を入力して以下のコードの違いを確認してください.
procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.Caption := Edit1.Text;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Form1.Caption := 'Edit1.Text';
end;
先ほど私が提示したコードがありますね.
LAddress := '"東京都品川区1-2-3"';
+ '"山田太郎", "1995/01/22",' + LAddress
です.この LAddress のところを,例えば Edit1 の Text プロパティの値に置き換えるどうなるか考えてやってみてください.
うまくいかない時は,ともかく動作するコードを少しずつ変えてテストみることです.
ヘョリメチルさん
移動中でしたので、返事が遅くなり申し訳ございませんでした。
ご指摘の通り、下記のように修正して実行しましたら、無事、出来ました。
ヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサ
ヲサヲサレコスァ「ァォナアョヤォァ「ャァ
ヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサォァ「ァォナイョヤォァ「ャァ
ヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサォァ「ァォナウョヤォァ「ァサ
一旦、解決とさせていただきます。
なお、2のヌの情報取得に関しては、もう少し自力で探してみます。
さんもありがとうございました。