delphi中如何使用SQL语句结果
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi中如何使用SQL语句结果相关的知识,希望对你有一定的参考价值。
在Delphi中使用ADOQuery.Add添加SQL语句后(如select * from usertable),如何使用其查询的结果?还有如果是执行存储过程,怎样编写存储过程才能让Delphi能够使用其中的值.
ADOQuery 插入资料在窗体上再加一个adoconnection1,使得它连接资料库,ADOQ连接它。
begin
try
adoconnection1.begintrans;//开始事务
...... //插入记录
reset;
adoconnection1.committrans;//提交事务
....... //给出一个button2.click时的异常
except
adoconnection1.rollbacktrans;//事务回滚
showmesage('添加失效!');
end;
end;
-----------------------------------------------
ADOQuery insert into data
procedure TForm1.Button1Click(Sender: TObject);
var
str:string;
begin
ADOQuery1.Close ;
ADOQuery1.SQL.Clear;
str:='insert into data values("'+ edit1.Text +'")';
// str:='insert into data(客户编号,客户名称,型号,规格,品名,Iteam_Logo,内条码,外条码,生产地,备注,建档日期) ';
// str:=str+ ' values("'+ dbedit1.Text + '","'+ dbedit2.Text +'","' + dbedit3.Text +'","' + dbedit4.Text +'","' + dbedit5.Text +'","' + dbedit11.Text +'",';
// str:=str+'"' +dbedit6.Text +'","' +dbedit7.Text +'","' +dbedit9.Text +'","' +dbedit10.Text +'","' +dbedit8.Text +'")';
ADOQuery1.SQL.Add(str);
// ADOQuery1.Prepare;
ADOQuery1.ExecSQL;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
str:string;
begin
ADOQuery1.Close ;
ADOQuery1.SQL.Clear;
str:='Select * From Data';
ADOQuery1.SQL.Add(str);
ADOQuery1.ExecSQL;
ADOQuery1.Open;
end; 参考技术A ADOQuery1.Add('select 用户名,密码 from usertable');
adoquery1.open;
当前用户:=adoquery1.FieldValues['用户名']; //读取值
adoquery1.FieldByName('密码').Value:='123456'; //修改值
adoquery1.next; //将指针指向下一条查询到的记录 参考技术B 问题一:
我一般是把ADOQuery和dataset、dbgrid一起用的。
sql执行的结果存在adoquery中。
问题二:
是指执行存储过程中得到的值吗?那是中间值吧??有点奇怪的用法。
我经验比较少,没试过。最笨的办法是建个临时表来存储数据,然后提出来本回答被提问者采纳
SQL Server 2012:如何在 @Var 前后使用文字在 Case 语句中显示 @Var 结果
【中文标题】SQL Server 2012:如何在 @Var 前后使用文字在 Case 语句中显示 @Var 结果【英文标题】:SQL Server 2012: How to display the @Var result inside a Case statement with literals before and after the @Var 【发布时间】:2015-09-27 21:27:36 【问题描述】:SQL Server 2012:如何在 Case
语句中显示 @Var
结果,并在 @Var
前后使用文字?
一个简单的查询:
Declare @Var1 ...
Declare @Var2....
Select ....
CASE
WHEN ...........
THEN 'Display this sentence ' + @Var1 +'followed by there words'
ELSE 'Display these other words ' +@Var2 'followed by these other words'
END
错误信息是
'显示这句话'不是声明变量。
我知道不是!它应该是文字语句,只有在文字语句中带有@Var1
结果。
我错过了什么?
【问题讨论】:
请发布实际代码。当你得到伪代码来调试时,很难在语句中找到语法错误 在 SQL Server 中,CASE
不是语句 - 它是 表达式,因此它可以返回几个可能值之一 -但它不能用于控制程序流程。您需要重新考虑您的代码以考虑到这一点 - CASE
只能返回一个值 - 您需要处理在 CASE
之外显示它的问题
【参考方案1】:
你做连接的方式没有错,我认为错误在逻辑上,你有IF ELSE
条件吗? ,可能你遇到的错误是在@var1
或@var2
这两个变量上,之所以显示这句话不是声明的变量是因为那是与变量串联的部分。
提示:
确保声明的变量@var1
和@var2
在条件的BEGIN and END
内,这意味着程序在读取CASE WHEN
逻辑之前读取您的声明。
如果您不确定逻辑,只需在脚本顶部声明您的 2 个变量,以确保它正在被读取/声明。
【讨论】:
我在错误消息上说错了(它是从另一台 PC 上的内存中完成的)。这是实际的错误消息:Msg 245, Level 16, State 1, Line 8 Conversion failed 将 varchar 值 ''Display these other words' 转换为数据类型 int。因此,错误消息是它认为文本(要显示)是需要转换的数据类型。有什么想法吗?【参考方案2】:根据评论:
我在错误消息上说错了(是从另一台 PC 上的内存中做的)。这是实际的错误消息:Msg 245, Level 16, State 1, Line 8 Conversion failed 将 varchar 值 ''Display these other words' 转换为数据类型 int。因此,错误消息是它认为文本(要显示)是需要转换的数据类型。有什么想法吗?
您的问题(如果发布了实际代码和错误,可能更容易解决)
声明@Var1 ...
其实是Declare @var1 int
。
所以你的陈述:
'Display this sentence ' + @Var1 +'followed by there words '
失败了:
将 varchar 值 ''Display these other words' 转换为数据类型 int 时转换失败。
您只需将 @Var1
转换/转换为 varchar
即可用于您的案例陈述。
WHEN 'Display this sentence ' + convert(varchar(14), @Var1) +'followed by there words '
您看到此行为的原因(取自here 是:
在尝试连接参数之前,您需要将参数显式转换为 VARCHAR。当 SQL Server 看到@my_int(在您的情况下为@Var1)+'X'时,它认为您正在尝试将数字“X”添加到@my_int(@Var1)并且它不能这样做。
另一个选项是concat。
WHEN concat('Display this sentence ', @Var1, ' followed by there words ')
【讨论】:
以上是关于delphi中如何使用SQL语句结果的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Delphi 中执行包含许多 GO 语句的大型 SQL 脚本? [关闭]
delphi 请问如何在SQL语句中实现对 Binary 类型的位运算?