Delphi7-PostgresSQL(PgOleDb.dll)で
更新SQL実行時に、
[EOleException] 行セットで列が定義されていません。
というエラーが出ますが
何がおかしいのか分かりません。
そのあと、Commitすると正常に更新されているし、
Rollbackすると更新されていないし・・・。
何かヒントになるようなことでもよろしいので
エラー解決の情報をお願いします。
更新するテーブルのField名と更新SQLのField名が合っていないのでしょう。
HOta様
返信ありがとうございます。
しかし、ツール上で直接そのSQLを発行すると
OKなんで・・・。
一応、ソースのっけておきます。
なんか手がかりがあればいいのですが・・・。
開発環境
Windows2000 Delphi7 PostgresSQL8.4.2
「PgOleDb.dll」を利用
画面にButton1つとEditを2つです。
uses
ADODB, ComObjを追加
procedure TForm1.Button1Click(Sender: TObject);
var
DBDataPassword: String;
DBDataUserID: String;
DBDataSource: String;
DBDataLocation: String;
DBExtendedProperties: String;
str_ErMes: String;
str_Result: String;
AdoQuery1: TADOQuery;
AdoConnection1:TAdoConnection;
begin
str_Result := '';
str_ErMes := '';
AdoConnection1 := TADOConnection.Create(nil);
AdoQuery1 := TADOQuery.Create(nil);
DBDataPassword := 'Password';//パスワード
DBDataUserID := 'UserID';//ユーザーID
DBDataSource := 'Source';//データソース
DBDataLocation := 'Location';
DBExtendedProperties := '""';//フラグ
try
try
AdoConnection1.Connected := False;
AdoConnection1.Provider := 'PostgreSQL.1';
AdoConnection1.ConnectionString := AdoConnection1.ConnectionString + 'Password=' + DBDataPassword + ';';
AdoConnection1.ConnectionString := AdoConnection1.ConnectionString + 'User ID=' + DBDataUserID + ';';
AdoConnection1.ConnectionString := AdoConnection1.ConnectionString + 'Data Source=' + DBDataSource + ';';
AdoConnection1.ConnectionString := AdoConnection1.ConnectionString + 'Location=' + DBDataLocation + ';';
AdoConnection1.ConnectionString := AdoConnection1.ConnectionString + 'Extended Properties=' + DBExtendedProperties + ';';
AdoConnection1.LoginPrompt := False;
AdoConnection1.ConnectionTimeout := 5;
AdoConnection1.Connected := True;
AdoQuery1.Connection := AdoConnection1;
AdoQuery1.Close;
AdoQuery1.SQL.Clear;
AdoQuery1.SQL.Add('UPDATE [TABLE] SET [FIELD] = ''[Edit1のDATA]''');
AdoQuery1.SQL.Add('WHERE [KEY_FIELD1] = ''[KEY_DATA1]''');
AdoQuery1.SQL.Add('AND [KEY_FIELD2] = ''[KEY_DATA2]''');
AdoQuery1.SQL.Add('AND [KEY_FIELD3] = ''[Edit2のDATA]''');
AdoQuery1.ExecSQL; <----------------- ここでエラー発生!
except
on EO: EOleException do begin
str_ErMes := '[' + EO.ClassName + '] ' + EO.Message;
end;
on E: Exception do begin
str_ErMes := '[' + E.ClassName + '] ' + E.Message;
end;
end;
finally
AdoQuery1.Free;
AdoConnection1.Free;
end;
if (str_ErMes = '') then begin
end else begin
ShowMessage(str_ErMes);
end;
end;
SQL文をテキストに落として、後でツール上で直接そのSQLを発行してみるとどうでしょうか。
> AdoQuery1.SQL.Add('AND [KEY_FIELD3] = ''[Edit2のDATA]''');
AdoQuery1.SQL.SaveToFile('hogehoge.sql') //でテキストに落とす。
> AdoQuery1.ExecSQL; <----------------- ここでエラー発生!
SQLの更新値に、’(シングルコーテーション)が入っているとか?
いろいろ調べたところ、
.CursorLocation := clUseServer;
が抜けていました。
皆様、ありがとうございました。
ツイート | ![]() |