我有一个使用ADO/MSDASQL.1提供程序的Delphi 7应用程序,我想知道是否可以以简单的方式"记录"发送到数据库的SQL查询?就像SQL Server中的SQL分析器一样?
我已声明AdoConnection : TADOConnection; 并成功连接到默认的"mysql"数据库(因此,无需传递该代码).
现在,采取婴儿步骤学习,我想AdoConnection.Execute('SHOW DATABASES', cmdText); 这似乎工作正常,从某种意义上说,它不会抛出异常,但我是一个n00b,我不知道我怎么能检查结果命令: - /
HALP!
当我尝试在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)
有没有办法检查数据库表是否为空而不会产生此类错误?
我使用此代码将行从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:无法对已关闭的数据集执行此操作.
它复制我想要的但只复制一次.如何复制多次?谢谢.
所以我是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很陌生,而且在我去的时候,我有点学习这一切.
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) 我正在使用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位时会工作吗?
谢谢。
我的网站现在纯粹以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)
有任何想法吗?
我正在制作一个Access应用程序,它将独家使用Jet(无SQL Server),并分成前端后端架构.我已经权衡了绑定/未绑定的利弊,并且仍然希望在这种情况下不受约束.
我有一些类和模块,我将导入到依赖于ADO记录集的项目中.但是,我已经阅读了几个建议,建议使用DAO填充Access表单http://support.microsoft.com/kb/281998 {Microsoft Jet的要求}.我知道这些是完全不同的库,不能彼此共享信息.但是,我认为我的类和其他ADO依赖对象可以使用本地表/查询和表单控制值的混合,这将避免潜在的冲突.
所以我的问题是:如果我只有DAO来填写这个项目的表格,我还在惹麻烦吗?如果是这样,我应该注意哪些问题?或者,如果我小心的话,期望这种分离可以共存是否合理,并且应用文档中解释了这种区别?
我从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?或者这必须通过数据库来完成.
FQuery是adoquery和db是访问
我知道我能做到
if .... = null then
onespell.plus := 0
else
.........
Run Code Online (Sandbox Code Playgroud)
但我希望在onepell的每个值的一行中做到这一点
ado ×10
delphi ×6
64-bit ×1
access-vba ×1
asp-classic ×1
dao ×1
database ×1
delphi-5 ×1
delphi-xe2 ×1
excel ×1
insert ×1
ms-access ×1
ms-office ×1
vb6 ×1