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 类型的位运算?

在delphi 7中如何写多行sql语句?

delphi中如何得到SQL表中记录总数?

delphi中如何实现对sql数据库记录进行添加,删除,修改

delphi中的SQL语句