0

MS-AccessでSQLクエリを直接実行すると、レコードが挿入されますが、DelphiのTADOQueryコンポーネントを介して実行すると、上記のエラーが表示されます。コードのエラーとは何ですか?

これが私のコードです:

strQuery := 'INSERT INTO MAS_User_Master
            (First_Name, Middle_Name, Last_Name, User_Name, Password, Mobile_No, 
             Email_Id, Security_Question, Security_Answer, Is_Admin, Is_Deleted,
             Created_By, Created_Date) 
            VALUES
            ('Adam', 'G.', 'James', 'adam', 'ada23',9999599990,
             'adam@yahoo.com', 'what', 'yes', -1, 0,
             'admin', Now())'

qryExec.SQL.Add(strQuery);
qryExec.ExecSQL();

編集:

上記のstrQuery値は、実行時にコピーされます。以下のコードで使用したステートメントを作成するには:

strQuery := 'INSERT INTO MAS_User_Master ' +
                  '(First_Name, Middle_Name, Last_Name, User_Name, Password, Mobile_No, Email_Id, '+
                  'Security_Question, Security_Answer, Is_Admin, Is_Deleted, Created_By, Created_Date) '+
                  'VALUES (''' + UserRec.FirstName + ''', ''' + UserRec.MiddleName +
                  ''', ''' + UserRec.LastName + ''', ''' +  UserRec.UserName + ''', ''' + UserRec.Password +
                  ''',' + UserRec.MobileNubmer + ', ''' + UserRec.EmailId + ''', '+
                  '''' + UserRec.SecurityQuestion + ''', ''' + UserRec.SecurityAnswer + ''', ' +
                  UserRec.IsAdmin + ', 0, '''+ g_strUserName + ''', Now())';
4

4 に答える 4

2
qryExec.Paramcheck := true;
qryExec.SQL.Text := 'INSERT INTO MAS_User_Master '
            +'(First_Name, Middle_Name, Last_Name, User_Name, [Password], Mobile_No, '
            +' Email_Id, Security_Question, Security_Answer, Is_Admin, Is_Deleted,'
            +' Created_By, Created_Date)'
            +'VALUES'
            +'(:fn, :mn, :ln, :un, :pw,:mno,'
            +' :em, :q, :an, :isad, :isDel,'
            +' :cb, :cd)';
qryExec.Parameters.ParamByName('fn').Value := 'Adam';
qryExec.Parameters.ParamByName('mn').Value := 'G.';
qryExec.Parameters.ParamByName('ln').Value := 'James';
qryExec.Parameters.ParamByName('un').Value := 'adam';
qryExec.Parameters.ParamByName('pw').Value := 'ada23';
qryExec.Parameters.ParamByName('mno').Value := 9999599990;
qryExec.Parameters.ParamByName('em').Value := 'adam@yahoo.com';
qryExec.Parameters.ParamByName('q').Value := 'what';
qryExec.Parameters.ParamByName('an').Value := 'yes';
qryExec.Parameters.ParamByName('isad').Value := -1;
qryExec.Parameters.ParamByName('isdel').Value := 0;
qryExec.Parameters.ParamByName('cb').Value := 'admin';
qryExec.Parameters.ParamByName('cd').Value := Now();
qryExec.ExecSQL();

別の方法は次のようになります。

AdoDataset.CommandText :='Select * from MAS_User_Master where 1=0';
AdoDataset.Append;
Adodataset.FieldByName('First_Name').Value := 'Adam';
// and so on
Adodataset.Post;
于 2012-12-18T07:36:44.890 に答える
2
Thank You! All of You..

私は解決策を見つけました:

上記のクエリと構文はすべて正しく、機能しています。

Important thing:

MS-Accessデータベースに「 PASSWORD」という名前のフィールドが1つあります。Delphiはこの単語を予約しているため、使用できません。フィールドの名前を変更し、すべてが正常に機能しています...

于 2012-12-18T10:36:27.217 に答える
0

いくつかのエラーの可能性があります

まず、クエリに引用符が含まれています。Delphiで文字列に引用符を使用するには、二重引用符を入力してエスケープする必要があります。そうしないと、文字列ターミネータと見なされます。これにより、Delphiのコンパイルエラーが発生します。

次に、AddSQLに移動します。つまり、SQLプロパティにすでに情報が含まれている場合は、このステートメントが追加され、無効なステートメントになる可能性があります。これにより、ExecSQLメソッドの実行時にADOによって生成されるランタイムエラーが生成されます。

あなたができる他のことは、あなたの問題を直接解決することはありませんが、あなたの人生をより簡単にし、あなたのプロジェクトをより維持しやすくします:

オブジェクトインスペクタを使用してSQLプロパティを編集します。引用符をエスケープする必要はなく、改行を簡単に追加でき、Accesstotestでそのまま同じクエリを実行できます。実行する必要のあるステートメントごとにTADOQuery(または挿入および更新ステートメントにはTADOCommand)を使用できるため、SQL自体を更新する必要はありません。

ステートメントで「変数値」を使用するには、コマンドのパラメーターを使用できます。

それらが邪魔にならないようにするために、設計時にフォームのサイトをブロックして、データモジュールにコマンドを配置できます。

于 2012-12-18T07:00:52.930 に答える
0

Delphiでは、二重引用符を使用して1つの引用符を文字列に挿入する必要があります。qryExec.SQL空であることを確認してください。qryExec.SQL.Clear前に行ってくださいqryExec.SQL.Add。またNow()、Delphi関数であるため、結果をNow()文字列に変換してSQLクエリに入れる必要があります。

strQuery := 'INSERT INTO MAS_User_Master (First_Name, Middle_Name, Last_Name, User_Name, Password, Mobile_No, Email_Id, Security_Question, Security_Answer, Is_Admin, Is_Deleted, Created_By, Created_Date) VALUES (''Adam'', ''G.'', ''James'', ''adam'', ''ada23'',9999599990, ''adam@yahoo.com'', ''what'', ''yes'', -1, 0, ''admin'', '''+DateToStr(Now())+''' )';

qryExec.SQL.Add(strQuery);
qryExec.ExecSQL();
于 2012-12-18T07:04:16.953 に答える