当我直接在MS-Access上执行SQL Query时,它会插入Record,但是当通过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())';
答案 0 :(得分: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;
答案 1 :(得分:2)
Thank You! All of You..
我找到了解决方案:
所有以上查询和语法都正确且正常工作..
Important thing:
我在 MS-Access数据库中有一个 字段 命名为“ PASSWORD ”。 Delphi保留了这个词,所以我们不能使用它们。我更改了Field的名称和所有正常工作......
答案 2 :(得分:0)
有几个可能的错误
首先,您的查询包含引号。要在Delphi中使用字符串中的引号,必须键入双引号以对其进行转义,否则将其视为字符串终止符。这将生成Delphi编译错误。
其次,你Add
到SQL。这意味着,如果SQL属性已包含信息,则会向其添加此语句,从而可能导致语句无效。这将生成运行时错误,由ADO在执行ExecSQL方法时生成。
您可以做的其他事情,不会直接解决您的问题,但让您的生活更轻松,您的项目更易于维护:
使用对象检查器编辑SQL属性。您不需要转义引号,可以轻松添加换行符,并且可以在Access to test中执行相同的查询。 您可以对需要执行的每个语句使用TADOQuery(或者更确切地说是TADOCommand用于插入和更新语句),因此您无需更新SQL本身。
要在语句中使用“变量值”,可以使用命令的 Parameters 。
为了确保它们不会妨碍,在设计时阻止表单的站点,您可以将命令放在数据模块上。
答案 3 :(得分:0)
在Delphi中,您应该使用双引号将一个引号插入到字符串中。
确保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();