1 客户端想把一些基本信息输入到数据库中,程序调用数据模块中的ClientDataSet1.CommandText的方法。但是动态sql写了几次都不行
strMagCardID:=VipUnit.GetCodeNo;
strPhone:=edtUserPhone.Text;
strMail:=edtEmail.Text;strSQLInsert:='insert to UserInfo values (:strMagCardID,:strPhone,:strMail,) ';
开始这样不行,报错,
在网上找找,就以葫芦画瓢在上面的代码下加了如下:
DataModule2.ClientDataSet1.Params.ParamByName('strMagCardID').AsString:=strMagCardID;
DataModule2.ClientDataSet1.Params.ParamByName('strPhone').AsString:=strPhone;
DataModule2.ClientDataSet1.Params.ParamByName('strMail').AsString:=strMail;
仍报错:说是'strMagCardID'没发现???
我感觉还是动态sql没有写好,特来问问大家?
strMagCardID:=VipUnit.GetCodeNo;
strPhone:=edtUserPhone.Text;
strMail:=edtEmail.Text;strSQLInsert:='insert to UserInfo values (:strMagCardID,:strPhone,:strMail,) ';
开始这样不行,报错,
在网上找找,就以葫芦画瓢在上面的代码下加了如下:
DataModule2.ClientDataSet1.Params.ParamByName('strMagCardID').AsString:=strMagCardID;
DataModule2.ClientDataSet1.Params.ParamByName('strPhone').AsString:=strPhone;
DataModule2.ClientDataSet1.Params.ParamByName('strMail').AsString:=strMail;
仍报错:说是'strMagCardID'没发现???
我感觉还是动态sql没有写好,特来问问大家?
的poAllowCommandText设置为True
的poAllowCommandText设置为True
还有一点需要注意:如果你的参数值可能存在汉字的话,就不要用参数了,会出错的。
cds.commandtext:='insert to UserInfo select ' +strMagCardID+','+strPhone+','+strMail
cds.execute;
DataModule2.ClientDataSet1.Params.ParamByName('strMagCardID').AsString:=strMagCardID;
DataModule2.ClientDataSet1.Params.ParamByName('strPhone').AsString:=strPhone;
DataModule2.ClientDataSet1.Params.ParamByName('strMail').AsString:=strMail;
出现
raised exception class EoleException with message'Parameter 对象被不正确地定义。提供了不一致或不完整的信息'
所以我提供表的结构:
CREATE TABLE UserInfo
(
MagCardID VARCHAR(12) NOT NULL,
Phone VARCHAR(30) NULL,
Mail VARCHAR(20) NULL,
) ON [PRIMARY]我想是不是因为我的参数是string类型的在sql中不能识别??如果我不注释掉刚才那段东西的话?
出现:
raised exception class EDatabaseError with message 'ClientDataSet1:Parameter'strMagCardID' not found
真不知道是哪里出了问题??
cds.CommandText := 'Insert into Loginstat (id,UserName,LoginTime, ip) ' + //添加数据
'values (''' + inttostr(pintUserId) + ''', ' +
'''' + psstrUsercode + ''', '+
'''' + FormatDateTime('yyyy-mm-dd hh:mm:ss', now) + ''', ' +
'''' + PstrUserIp + ''')';
ds.Execute;
谢谢兄弟的解答,但是为什么有的地方要3-4个单引号呢?
strMagCardID:=VipUnit.GetCodeNo; strUserName:=edtUserName.Text;
strAddress:=edtAddress.Text;
strPhone:=edtUserPhone.Text;
strMail:=edtEmail.Text; if(rbMan.Checked)
then strSex:='男'
else
strSex:='女'; if(cbJob.Text <>'职业') then strJob := cbJob.Text;
if(cbEducation.Text<>'学历') then strEducation:=cbEducation.Text;
if (cbAge.Text<>'年龄段' ) then strAge:=cbAge.Text;
if (memNote.Text<>'') then strNote:=memNote.Text;
// strSQLInsert:='insert to UserInfo values (:strMagCardID,:strSex,:strUserName,:strAddress,:strPhone,:strEducation,:strJob,:strFamily,:strMail,:strAge,:strNote) ';
strSQLInsert:='insert into UserInfo (MagCardID,Sex,Name,Address,Phone,Education,Job,Family,Mail,Age,Note)'
+' values ('''+strMagCardID+''','+
''''+strSex+''','+
''''+strUserName+''','+
''''+strAddress+''','+
''''+strPhone+''','+
''''+strEducation+''','+
''''+strJob+''','+
''''+strFamily+''','+
''''+strMail+''','+
''''+strAge+''','+
''''+strNote+''') ';
问题已经解决,过段时间总结.
Delphi中两个引号,代表字符串传到SQLServer后成为一个引号,因为SQL Server中需要一个引号。