怎么给sql语句断句啊?

lx8888_2006 2010-11-07 03:52:04
往数据库里添加数据,代码如下:

procedure Thzxx.BitBtn1Click(Sender: TObject);
begin
Try
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('Insert Pat_if values(:a,:aa,ab,ac,ad,:ae,:af,:ag,:ah,:ai,:aj,:ba,:bb,:bca,:bcb,:bda,:bdb,:be,:bf,:bg,:bha,:bhb,:bhc,:bhd,:bia,:bib,:bic,:bid,:bja,:bjb,:bk,:bl,:bm,:bna,:bnb,:bnc,:bnd,:boa,:bob,:boc,:bod,:bpa,:bpb,:bpc,:bqa,:bqb,:bqc,:bra,:brb,:brc,:brd,:c')');
Parameters.ParamByName('a').Value := Trim(Edit16.Text);
Parameters.ParamByName('aa').Value := Trim(Edit1.Text);
Parameters.ParamByName('ab').Value := Trim(ComboBox1.Text);
Parameters.ParamByName('ac').Value := Trim(Edit2.Text);
Parameters.ParamByName('ad').Value := Trim(Edit3.Text);
Parameters.ParamByName('ae').Value := Trim(Edit4.Text);
Parameters.ParamByName('af').Value := Trim(Edit5.Text);
Parameters.ParamByName('ag').Value := Trim(Edit6.Text);
Parameters.ParamByName('ah').Value := Trim(Edit7.Text);
Parameters.ParamByName('ai').Value := Trim(ComboBox2.Text);
Parameters.ParamByName('aj').Value := Trunc(Datetimepicker1.date);
Parameters.ParamByName('ba').Value := Trim(ComboBox3.Text);
Parameters.ParamByName('bb').Value := Trim(ComboBox4.Text);
Parameters.ParamByName('bca').Value := Trim(ComboBox5.Text);
Parameters.ParamByName('bcb').Value := Trim(ComboBox6.Text);
Parameters.ParamByName('bda').Value := Trim(ComboBox7.Text);
Parameters.ParamByName('bdb').Value := Trim(Edit8.Text);
Parameters.ParamByName('be').Value := Trim(Edit9.Text);
Parameters.ParamByName('bf').Value := Trim(Edit10.Text);
Parameters.ParamByName('bg').Value := Trim(Edit11.Text);
Parameters.ParamByName('bha').Value := Trim(ComboBox8.Text);
Parameters.ParamByName('bhb').Value := Trim(ComboBox9.Text);
Parameters.ParamByName('bhc').Value := Trim(ComboBox10.Text);
Parameters.ParamByName('bhd').Value := Trim(Edit12.Text);
Parameters.ParamByName('bia').Value := Trim(ComboBox12.Text);
Parameters.ParamByName('bib').Value := Trim(Edit13.Text);
Parameters.ParamByName('bic').Value := Trim(ComboBox14.Text);
Parameters.ParamByName('bid').Value := Trim(Edit14.Text);
Parameters.ParamByName('bja').Value := Trim(ComboBox16.Text);
Parameters.ParamByName('bjb').Value := Trim(ComboBox17.Text);
Parameters.ParamByName('bk').Value := Trim(ComboBox18.Text);
Parameters.ParamByName('bl').Value := Trim(ComboBox19.Text);
Parameters.ParamByName('bm').Value := Trim(ComboBox20.Text);
Parameters.ParamByName('bna').Value := Trim(ComboBox21.Text);
Parameters.ParamByName('bnb').Value := Trim(ComboBox22.Text);
Parameters.ParamByName('bnc').Value := Trim(ComboBox23.Text);
Parameters.ParamByName('bnd').Value := Trim(Edit15.Text);
Parameters.ParamByName('boa').Value := Trim(ComboBox28.Text);
Parameters.ParamByName('bob').Value := Trim(ComboBox27.Text);
Parameters.ParamByName('boc').Value := Trim(ComboBox26.Text);
Parameters.ParamByName('bod').Value := Trim(ComboBox25.Text);
Parameters.ParamByName('bpa').Value := Trim(ComboBox30.Text);
Parameters.ParamByName('bpb').Value := Trim(ComboBox31.Text);
Parameters.ParamByName('bpc').Value := Trim(ComboBox29.Text);
Parameters.ParamByName('bqa').Value := Trim(ComboBox33.Text);
Parameters.ParamByName('bpb').Value := Trim(ComboBox34.Text);
Parameters.ParamByName('bpc').Value := Trim(ComboBox32.Text);
Parameters.ParamByName('bra').Value := Trim(ComboBox35.Text);
Parameters.ParamByName('bpb').Value := Trim(ComboBox36.Text);
Parameters.ParamByName('bpc').Value := Trim(ComboBox37.Text);
Parameters.ParamByName('bpd').Value := Trim(ComboBox38.Text);
ExecSQL;
end;
Application.MessageBox('添加成功。','提示',64);
Except
Application.MessageBox('系统出错。','提示',64);
Close;
end;
end;



SQL.Add('Insert Pat_if values(:a,:aa,ab,ac,ad,:ae,:af,:ag,:ah,:ai,:aj,:ba,:bb,:bca,:bcb,:bda,:bdb,:be,:bf,:bg,:bha,:bhb,:bhc,:bhd,:bia,:bib,:bic,:bid,:bja,:bjb,:bk,:bl,:bm,:bna,:bnb,:bnc,:bnd,:boa,:bob,:boc,:bod,:bpa,:bpb,:bpc,:bqa,:bqb,:bqc,:bra,:brb,:brc,:brd,:c')');

这句太长了,超过255字节,请问怎么断开一下好呢?
...全文
204 点赞 收藏 16
写回复
16 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
randee_luo 2010-11-09
注意下类型方面。。
回复
taste品味 2010-11-09
VAR
temp :string;
begin
temp :='Insert Pat_if values(:a,:aa,ab,ac,ad,:ae,:af,:ag,:ah,:ai,:aj,:ba,:bb,:bca,:bcb,:bda,:bdb,:be,:bf,:bg,:bha,:bhb,:bhc,:bhd,:bia,:bib,:bic,:bid,:bja,:bjb,:bk,:bl,:bm,:bna,:bnb,';
temp:=temp+':bnc,:bnd,:boa,:bob,:boc,:bod,:bpa,:bpb,:bpc,:bqa,:bqb,:bqc,:bra,:brb,:brc,:brd,:c')'
SQL.Add(temp)
end;
回复
东南西北风 2010-11-09
LZ,你可以设断点,将SQL语句复制出来,到SQL SERVER里面试一下,这样一个就会知道那个字段出错,无论是字段名称,还是字段类型都会有相应的提示。
回复
kye_jufei 2010-11-08
1.用sql.add進行分隔;
2.檢查日期和時間字段部分的傳值。。。
回复
haitao 2010-11-08
“应用程序在当前操作中使用了错误类型的值”是什么时候报的?
是 设参数时,还是执行sql时?
它没有说【哪个字段】的值类型不对吗?
回复
cgwr 2010-11-08
同意xftyyyyb的意见,这多字段,找错误浪费的时间可能很久
回复
Versus1008 2010-11-08
你直接用数据绑定的控件多好……
比如edit 换成dbedit
放几个按钮 新增 编辑 删除 保存 等
执行相应的操作 ADOQuery1.Append ADOQuery1.Edit ADOQuery1.Delete ADOQuery1.Post
这不比你这么插入方便多了
回复
TikYang 2010-11-07
前面说过,对于如此多的字段,最好的办法用强类型,这样在更新的时间就不会出现问题,而且很容易判断是那个字段赋值出错,你出现的错误在这两个方面找,1、字符串长度超过数据库字段长度;2、那个日期类型是否传进去的格式正确
回复
lx8888_2006 2010-11-07
[Quote=引用 4 楼 sz_haitao 的回复:]

这样不行吗?
Delphi(Pascal) code
SQL.Add('Insert Pat_if values(:a,:aa,ab,ac,ad,:ae,:af,:ag,:ah,:ai,:aj,:ba,');
SQL.Add(':bb,:bca,:bcb,:bda,:bdb,:be,:bf,:bg,:bha,:bhb,:bhc,:bhd,');
SQL.Add(':bia,:bib,:bic……
[/Quote]


现在行了,倒又有一个问题出来,说“应用程序在当前操作中使用了错误类型的值”,我把SQL数据表脚本附上,各位再帮我看看:

USE [implant]
GO
/****** 对象: Table [dbo].[Pat_inf] 脚本日期: 11/07/2010 19:53:47 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Pat_inf](
[病历号] [int] NOT NULL,
[姓名] [varchar](20) NOT NULL,
[性别] [char](2) NOT NULL,
[固定电话] [varchar](20) NOT NULL,
[移动电话] [char](11) NOT NULL,
[地址] [varchar](max) NOT NULL,
[联系人姓名] [varchar](20) NOT NULL,
[联系人电话] [char](11) NOT NULL,
[其他联系] [varchar](100) NOT NULL,
[首诊医师] [varchar](20) NOT NULL,
[首诊日期] [datetime] NOT NULL,
[支架术] [varchar](20) NOT NULL,
[搭桥术] [varchar](20) NOT NULL,
[是否颌骨骨折] [char](2) NOT NULL,
[骨折关系] [varchar](6) NULL,
[其他手术是否] [char](2) NOT NULL,
[其他手术名称] [varchar](20) NOT NULL,
[药敏] [char](2) NOT NULL,
[家族病] [varchar](20) NOT NULL,
[遗传病] [varchar](20) NOT NULL,
[放疗是否] [char](2) NOT NULL,
[放疗时点] [char](2) NULL,
[放疗时长] [varchar](10) NULL,
[放疗剂量] [varchar](10) NULL,
[长期用药是否] [char](2) NOT NULL,
[用药名称] [varchar](20) NULL,
[用药时长] [varchar](10) NULL,
[用药频率] [varchar](20) NULL,
[夜磨牙是否] [char](2) NOT NULL,
[夜磨牙频度] [char](4) NULL,
[偏侧咀嚼] [varchar](4) NOT NULL,
[口干是否] [char](2) NOT NULL,
[怀孕是否] [char](2) NOT NULL,
[吸烟是否] [char](2) NOT NULL,
[吸烟时长] [varchar](20) NULL,
[吸烟频率] [varchar](20) NULL,
[戒烟时长] [varchar](20) NULL,
[饮酒是否] [char](2) NOT NULL,
[饮酒时长] [varchar](20) NULL,
[饮酒频率] [varchar](20) NULL,
[饮酒种类] [varchar](20) NULL,
[刷牙规律] [varbinary](6) NOT NULL,
[刷牙次数] [char](1) NOT NULL,
[刷牙方法] [varchar](20) NOT NULL,
[辅助工具是否] [char](2) NOT NULL,
[辅助工具名称] [varchar](20) NULL,
[辅助工具频度] [varchar](20) NULL,
[洁治是否] [char](2) NOT NULL,
[洁治时长] [char](2) NULL,
[定期洁治是否] [char](2) NULL,
[定期洁治周期] [varchar](20) NULL,
[备注] [varchar](max) NULL
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF
回复
TikYang 2010-11-07
这样不是太好,还是强类型的好,容易查出错误
回复
haitao 2010-11-07
这样不行吗?
SQL.Add('Insert Pat_if values(:a,:aa,ab,ac,ad,:ae,:af,:ag,:ah,:ai,:aj,:ba,');
SQL.Add(':bb,:bca,:bcb,:bda,:bdb,:be,:bf,:bg,:bha,:bhb,:bhc,:bhd,');
SQL.Add(':bia,:bib,:bic,:bid,:bja,:bjb,:bk,:bl,:bm,:bna,:bnb,:bnc,');
SQL.Add(':bnd,:boa,:bob,:boc,:bod,:bpa,:bpb,:bpc,:bqa,');
SQL.Add(':bqb,:bqc,:bra,:brb,:brc,:brd,:c')');

回复
TikYang 2010-11-07
你直接用ADOQuery1 写下 select top 1 {你要更新的字段列表} from Pat_if


要程序中直接导出所有字段,然后
ADOQuery1.active:=true;
ADOQuery1.Append;
......
//举一个例子
ADOQuery1bpd.asstring := Trim(ComboBox38.Text);

.......
ADOQuery1.post;
回复
lx8888_2006 2010-11-07
怎么绑定呢? 代码又怎么写呢
回复
TikYang 2010-11-07
用绑定吧,还能检查是否有错
回复
相关推荐
发帖
数据库相关
创建于2007-08-02

2454

社区成员

Delphi 数据库相关
申请成为版主
帖子事件
创建了帖子
2010-11-07 03:52
社区公告
暂无公告