标签: ado

是否可以在Delphi应用程序和MsAccess DB之间记录SQL查询?

我有一个使用ADO/MSDASQL.1提供程序的Delphi 7应用程序,我想知道是否可以以简单的方式"记录"发送到数据库的SQL查询?就像SQL Server中的SQL分析器一样?

delphi ado

2
推荐指数
1
解决办法
1192
查看次数

Delphi/ADO:如何获得Execute()的结果?

我已声明AdoConnection : TADOConnection; 并成功连接到默认的"mysql"数据库(因此,无需传递该代码).

现在,采取婴儿步骤学习,我想AdoConnection.Execute('SHOW DATABASES', cmdText); 这似乎工作正常,从某种意义上说,它不会抛出异常,但我是一个n00b,我不知道我怎么能检查结果命令: - /

HALP!

delphi ado

2
推荐指数
1
解决办法
1万
查看次数

Delphi - BOF或EOF为True,或者当前记录已被删除

当我尝试在MS SQL Server 2005中的空表上选择时显示此错误:"BOF或EOF为True,或者当前记录已被删除".我在Delphi 5中使用了TADOConnection和TADODataSet来连接和检索数据库中的数据.

  Conn := TADOConnection.Create(nil);
  DataSet := TADODataSet.Create(nil);

  Conn.ConnectionString := 'Provider=SQLOLEDB.1;Password=sa;' +
                           'Persist Security Info=True;' +
                           'User ID=user;Initial Catalog=mydb;' +
                           'Data Source=MYPC\SQLEXPRESS;' +
                           'Use Procedure for Prepare=1;' +
                           'Auto Translate=True;Packet Size=4096;' +
                           'Workstation ID=MYPC;' +
                           'Use Encryption for Data=False;' +
                           'Tag with column collation when possible=False';
  Conn.LoginPrompt := False;
  Conn.Open;

  DataSet.Connection := Conn;
  DataSet.CommandText := 'SELECT * FROM MYTABLE';
  DataSet.Open;

  DataSet.Free;
  Conn.Free;
Run Code Online (Sandbox Code Playgroud)

有没有办法检查数据库表是否为空而不会产生此类错误?

delphi sql-server-2005 ado delphi-5

2
推荐指数
2
解决办法
3706
查看次数

TADOQuery.Open只执行一次语句

我使用此代码将行从Table1复制到Table2,但它给了我

命令文本不返回结果集

 ADOQuery1.Close;
 ADOQuery1.SQL.Clear;
 ADOQuery1.SQL.Add('insert into Table1');
 ADOQuery1.SQL.Add('select Field1 ,Field2 from Table2');
 ADOQuery1.SQL.Add('where ArtNo= 1');
 ADOQuery1.Open;
 ADOQuery1.Refresh ;
Run Code Online (Sandbox Code Playgroud)

如果我不使用

 ADOQuery1.Open;
Run Code Online (Sandbox Code Playgroud)

它给了我

ADOQuery1:无法对已关闭的数据集执行此操作.

它复制我想要的但只复制一次.如何复制多次?谢谢.

database delphi ado insert

2
推荐指数
1
解决办法
1845
查看次数

VB6 ADODB记录集更新

所以我是Visual Basic的新手,并继承了我现在需要处理的VB6代码.现在,我正在尝试使用ADODB.RecordSet更新SQL数据库.我有一个Select SQL语句,它将数据库中的正确数据提取到ADODB.RecordSet中,但是我在更新所有行时遇到了问题.我想要做的是为每行更新相同的列具有相同的值.现在,它更新了一些记录,但是我弹出一个错误.我得到的错误是:

运行时错误3021:BOF或EOF为True或当前记录已被删除.请求的操作需要当前记录.

当我点击调试时,它需要我rsUpdate.fields(TargetFieldName)= value

项目本身庞大而且太大而无法发布,但我现在正在处理的部分代码是:

If rsUpdate.State = adStateOpen Then
  If rsUpdate.EOF Then
   rsUpdate.Close
   Exit Function
  End If
rsUpdate.MoveFirst
Dim i as Integer
For i = 0 To rsUpdate.recordCount
 rsUpdate.fields(TargetFieldName) = value
 rsUpdate.MoveNext
Next i
On Error GoTo canupdaterecord
rsUpdate.Update
On Error GoTo 0
rsUpdate.Close
End If
Exit function
Run Code Online (Sandbox Code Playgroud)

所以你们给我的任何帮助都将不胜感激.就像我说的那样,我对VB很陌生,而且在我去的时候,我有点学习这一切.

vb6 ado

2
推荐指数
1
解决办法
9489
查看次数

就ADO而言,nvarchar(max)有多大?

我正在尝试对ADO使用参数化查询:

INSERT INTO Foo(名称,值)VALUES(@ name,@ value)

在SQL Server中,Name列是一种varchar类型.这个Value专栏是一个nvarchar(max).

什么尺寸做我创建参数时,我不知道,还是要指定,大小的时候通过?

procedure SaveTheThing(Connection: TADOConnection);
var
   sql: WideString;
   cmd: _Command;
begin
   sql := 'INSERT INTO Foo (Name, Value) VALUES(@name, @value)';

   cmd := CoCommand.Create;
   cmd.Set_ActiveConnection(Connection.ConnectionObject);
   cmd.Set_CommandType(adCmdText);
   cmd.Set_CommandText(sql);

   //and now add the parameters
   cmd.Parameters.Append(
         cmd.CreateParameter('@name', adVarChar, adParamInput, -1, filename)
   );
   cmd.Parameters.Append(
         cmd.CreateParameter('@value', adVarWChar, adParamInput, -1, GetXmlToWideString)
   );

   cmd.Execute({out}recordsAffected, EmptyParam, adCmdSomeThatDoesntCauseAnExcetpion or adExecuteNoRecords);
end;
Run Code Online (Sandbox Code Playgroud)

简单的替代方案是:

sql := 'INSERT INTO Foo (Name, Value)'#13#10+ …
Run Code Online (Sandbox Code Playgroud)

delphi ado parameterized-query

2
推荐指数
1
解决办法
2750
查看次数

当在64位元上构建时,“找不到提供程序。可能未正确安装”

我正在使用ADO连接到EXCEL。在我的机器办公室中,安装了32位。使用32位构建时,以下代码可以正常运行:

_ConnectionPtr conn;
conn->Open(connStr, "", "", NULL);
Run Code Online (Sandbox Code Playgroud)

连接字符串包括:

Provider=Microsoft.ACE.OLEDB.12.0
Run Code Online (Sandbox Code Playgroud)

当编译为64位时,我得到:“找不到提供程序。它可能未正确安装。” (hr = -2146824582)。64位存在兼容性问题吗?我应该安装64位Office吗?如果这样做,我的代码在构建为32位时会工作吗?

谢谢。

excel 64-bit ado ms-office

2
推荐指数
1
解决办法
2万
查看次数

在经典的asp中将utf-8转换为iso-8859-1

我的网站现在纯粹以UTF-8工作,但为了使用serverXMLHTTP发送短信,我需要在发送之前将我的消息从UTF-8转换为ISO-8859-1.

情况与此并行:

a.asp:

<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head><body>
<form method="post" action="b.asp">
<input type text name="message" value="æøå and ÆØÅ"><br>
<input type=submit>
</body>
Run Code Online (Sandbox Code Playgroud)

然后是b.asp

<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
</head><body>
<%=konvert(request("message"))%><br>
</body>
<%
Function Konvert(sIn)
    Dim oIn : Set oIn = CreateObject("ADODB.Stream")
    oIn.Open
    oIn.CharSet = "UTF-8" 
    oIn.WriteText sIn
    oIn.Position = 0
    oIn.CharSet = "ISO-8859-1"
    Konvert = oIn.ReadText
    oIn.Close
End Function
%>
Run Code Online (Sandbox Code Playgroud)

在这个展示中,我希望在b.asp中看到相同的字符串,因为我发送了一个a.asp,但是我得到了这个:

æøå and ÆØÅ
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

ado serverxmlhttp character-encoding asp-classic

2
推荐指数
1
解决办法
3万
查看次数

在Access应用程序中混合ADO和DAO

我正在制作一个Access应用程序,它将独家使用Jet(无SQL Server),并分成前端后端架构.我已经权衡了绑定/未绑定的利弊,并且仍然希望在这种情况下不受约束.

我有一些类和模块,我将导入到依赖于ADO记录集的项目中.但是,我已经阅读了几个建议,建议使用DAO填充Access表单http://support.microsoft.com/kb/281998 {Microsoft Jet的要求}.我知道这些是完全不同的库,不能彼此共享信息.但是,我认为我的类和其他ADO依赖对象可以使用本地表/查询和表单控制值的混合,这将避免潜在的冲突.

所以我的问题是:如果我只有DAO来填写这个项目的表格,我还在惹麻烦吗?如果是这样,我应该注意哪些问题?或者,如果我小心的话,期望这种分离可以共存是否合理,并且应用文档中解释了这种区别?

ms-access dao ado access-vba ms-access-2010

2
推荐指数
1
解决办法
2821
查看次数

如何检查单行中是否为空值

我从db获取一个值,当值为NULL时,我收到一个错误

无法将类型(null)的变体转换为类型(整数)

如果我用0填充数据库而不是(NULL),则错误消失

所以说我有这个

  OneSpell.PerCent     :=              FQuery.Recordset.Fields[ DB_FLD_PER_CENT    ].Value;
  OneSpell.Plus        := TCardPlus  ( FQuery.Recordset.Fields[ DB_FLD_PLUS        ].Value );
  OneSpell.Quantity    :=              FQuery.Recordset.Fields[ DB_FLD_QUANTITY    ].Value;
Run Code Online (Sandbox Code Playgroud)

有没有办法说,如果值为NULL然后使其为0?或者这必须通过数据库来完成.

FQueryadoquery和db是访问

我知道我能做到

if  .... = null then 
  onespell.plus := 0 
else
   .........
Run Code Online (Sandbox Code Playgroud)

但我希望在onepell的每个值的一行中做到这一点

delphi ado delphi-xe2

2
推荐指数
2
解决办法
3万
查看次数