标签: ado

VB6 ADO Set rs = command.Execute

Set rs = command.Execute 
if not rs.EOF then
   'logic here
end if
Run Code Online (Sandbox Code Playgroud)

上面的代码在第2行失败,因为rs已关闭(可能oledb提供程序错误地认为它是一个insert命令,所以不需要返回任何内容).该命令是一个插入语句,如:

Insert into log(Name,Value) values("xxx", 123); select scope_identity()
Run Code Online (Sandbox Code Playgroud)

我需要在一次往返中从服务器返回身份.有任何想法吗?

PS:更新了带字段名称的插入语句(感谢Eduardo),但这不是问题.

vb6 ado

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

从Windows Scripting Host中删除Excel文件

是否有一种快速方法可以从Windows Scripting Host 操作现有 XLS文件的内容?

我们收到了客户提供的Excel模板.我们的任务是使用从Oracle数据库中获取的数据填充这些模板.

目前的方法是使用Windows Scripting Host和VBScript:

  1. 使用ADODB从Oracle获取数据:

    Set db = CreateObject("ADODB.Connection")
    SQL = "SELECT ..."
    Set rs=db.execute(SQL)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用VBScript在Windows Scripting Host中创建Excel对象:

    Set objExcel = CreateObject("Excel.Application")  
    Set objWorkbook = objExcel.Workbooks.Open(xls_final)  
    Set objSheet = objWorkBook.Sheets(1)
    
    Run Code Online (Sandbox Code Playgroud)
  3. 然后像这样逐个单元填写模板:

    If rs.EOF = False Then
       rs.MoveFirst
       Do Until rs.EOF
          objSheet.Cells(RowNumber, 1).Value = rs("COLUMN1")
          objSheet.Cells(RowNumber, 2).Value = rs("COLUMN2")
          objSheet.Cells(RowNumber, 3).Value = rs("COLUMN3")
          rs.MoveNext
       Loop
    End If
    objWorkbook.Save 
    rs.Close
    
    Run Code Online (Sandbox Code Playgroud)

    问题是这些文件中的一些包含大量数据,并且需要花费数小时来填充它们.有更快的方法吗?

vbscript excel ado wsh

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

Delphi - 将DateTime Null保存到DB(ADO/MySQL)

我有一个带有一些数据库控件的Delphi表单.

为了表示一个日期,我使用了TJvDBDatePickerEdit(来自JCL),它有一个很好的属性

ShowCheckBox := True;
Run Code Online (Sandbox Code Playgroud)

允许用户输入没有已知日期(DBNull).

我验证,使DatePicker归零按预期工作:

procedure Tframe.adoQueryBeforePost(DataSet: TDataSet);
begin
  if (qryAuftraege.FieldByName('MyDateField').IsNull) then
  begin
    ShowMessage('IsNull!');
  end;
end;
Run Code Online (Sandbox Code Playgroud)

消息框显示.所以ADO组件应该写的字段是varNull类型.

现在有这个管道:

TADOQuery -> TADOConnection -> MS OLE DB Provider for ODBC Drivers -> MySQL ODBC 5.1 Driver
Run Code Online (Sandbox Code Playgroud)

MySQL ODBC驱动程序现在显示在它的日志中:

UPDATE `db`.`table` SET `MyDateField`=_latin1'0004-00-00' WHERE `ID`=5 AND `MyDateField`=_latin1'2009-06-17';
Run Code Online (Sandbox Code Playgroud)

好吧,日期存储为'0004-00-00'(MySQL似乎保存这样).现在在查询条目时,它被Delphi识别为Null,但是当它下次更新时,调用:

UPDATE `bvl`.`auftraege` SET `MyDateField`=_latin1'2009-06-17' WHERE `ID`=5 AND `MyDateField` IS NULL;
Run Code Online (Sandbox Code Playgroud)

当然失败了,因为MyDateField不是NULL(至少在MySQL DB中).

这个字符串'0004-00-00'来自哪里?如果它是某个地方的错误,我可以在哪里拦截它?

我已经知道有些组件可以提供直接的MySQL连接(我假设)没有显示这种行为.

mysql delphi odbc ado date

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

打开Delphi时,Adoconnection会询问用户名和密码

我正在尝试打开ADOConnection组件.数据库采用MDB格式.我使用JET来访问它.

每当我在我的代码中使用AdoConnection.Open时,窗口会弹出并请求userid和pass.我为userid输入"Admin"并将密码保留为空,它可以工作,但我不想弹出这个窗口.我尝试使用AdoConnection.Open('Admin','');但窗口仍然弹出.有什么建议?

delphi ado adoconnection

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

如何使用ADO从查询中检索所有错误和消息

当SQL批处理从例如print语句返回多个消息时,我只能使用ADO连接的Errors集合检索第一个消息.我如何获得其余的消息?

如果我运行此脚本:

Option Explicit
Dim conn
Set conn = CreateObject("ADODB.Connection")
conn.Provider = "SQLOLEDB"
conn.ConnectionString = "Data Source=(local);Integrated Security=SSPI;Initial Catalog=Master"
conn.Open

conn.Execute("print 'Foo'" & vbCrLf & "print 'Bar'" & vbCrLf & "raiserror ('xyz', 10, 127)")

Dim error
For Each error in conn.Errors
    MsgBox error.Description
Next
Run Code Online (Sandbox Code Playgroud)

然后我只回到"Foo",从不"Bar"或"xyz".

有没有办法获取剩余的消息?

sql-server vbscript ado

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

Visual Basic应用程序中的错误440

在我的一个客户端运行一个旧的VB应用程序.这个代码中有一个例外:

cn=GetIndexDatabaseConnectionString()
sSql="SELECT * FROM Arh_Naroc WHERE StNarocila = '" & isci & "'"                            
rs=CreateObject("ADODB.Recordset")
Call rs.Open(sSql,cn)
Run Code Online (Sandbox Code Playgroud)

异常发生在rs.Open()函数中."错误号码440发生了."

这是KOFAX引擎的SBL脚本,它已有很多年了.整个SW从旧的XP计算机转移到Windows 7,看起来到处都有问题.

有人可以帮我确定这里的问题.至少如果我能在msgbox中收到正确的错误消息将是最有帮助的.

编辑:这是连接字符串函数.

Function GetIndexDatabaseConnectionString
 Dim objXmlDocument As Object
 Dim objXmlGlobalSettingsFileParh As Object
 Dim objXmlIndexDatabaseConnectionString As Object
 Dim strGlobalSettingsFilePath As String
 Dim strTemp As String
 Const strSettingsFilePath = "C:\Data\LocalDocsDistibutingSystem\Settings.xml"
 Set objXmlDocument = CreateObject("MSXML2.DOMDocument")
 objXmlDocument.Load strSettingsFilePath
 Set objXmlGlobalSettingsFileParh = objXmlDocument.selectSingleNode("DocsDistributingSystem/GlobalSettingsFilePath")
 strGlobalSettingsFilePath = objXmlGlobalSettingsFileParh.childNodes(0).Text
 Set objXmlGlobalSettingsFileParh = Nothing
 Set objXmlDocument = Nothing
 Set objXmlDocument = CreateObject("MSXML2.DOMDocument")
 objXmlDocument.Load strGlobalSettingsFilePath
 Set objXmlIndexDatabaseConnectionString = …
Run Code Online (Sandbox Code Playgroud)

vb6 vba ado

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

ADO Connection.ConnectionString不再返回凭据

我有一个遗留的ASP应用程序,我需要在现代服务器上发布.它使用ADO和SQLOLEDB与MS SQL Server通信.它使用用户名和密码登录SQL.

该应用程序依赖于似乎已更改的ADO Connection对象的特殊行为.这些天(在ADODB.Connection.6中),当您向Connection提供连接字符串然后将其检索回来时,您不会获得原始字符串的精确副本; 具体来说,从中删除用户名和密码,并添加一些额外的参数.

看起来旧版本的ADO在这种情况下没有剥离凭证; 如果它应用程序将永远不会工作,它的工作原理.问题 - 这是记录在案的吗?有没有办法在新的ADO中强制执行遗留行为?

我真的不想在共享服务器上降级ADO.

编辑:只是将它隔离到一个最小的测试用例.适用于Windows 2003上的Connection.2.80(msado15.dll v.2.82.5011.0),在Windows 2008上的Connection.6上失败(dll v.6.1.7600.17036).

EDIT2:官方称,旧的MDAC 2.8(ADO是其中的一部分)在Vista及更高版本上不受支持.所以降级并不是一个真正的选择.

sql-server ado asp-classic

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

使用SQL查询没有标题行的Excel工作表

我一直在寻找解决方案,我发现自己空手而归.

问题是:如果列引用没有明确的标题行,是否可以针对工作表构建SQL查询?

很容易:

  |     A     |     B
1 | FirstName | LastName
2 | John      | Davis
3 | Mary      | Parker

SELECT [LastName] FROM [Sheet1$] WHERE [FirstName] = 'John'

- >"戴维斯"

但是,我倾向于使用无标题的CSV文件,所以如果我没有引导标题行,我该怎么办?

  |     A     |     B
1 | John      | Davis
2 | Mary      | Parker
SELECT ??? FROM [Sheet1$] WHERE ??? = 'John'

为了扩展这个问题,知道如何引用行号也是同样有趣的 - 如果可能的话 - 说我想找到相对于行[2]的姓氏(B列)

提前感谢我对难题的任何意见!

-B

sql excel odbc vba ado

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

ADO vs Firedac报价登录.Locate

我们正在Delphi XE5(即将成为DX)中将近200万行代码从BDE迁移到SQL Server.

我们遇到了一个大问题.

我们一直在使用ADO,但微软未能在同时具有单引号和井号的字符串上实现.Locate.例:

TADOQuery1.Locate('FieldName', '2x4'' 10#', []) 
Run Code Online (Sandbox Code Playgroud)

失败了:

参数类型错误,超出可接受的范围,或彼此冲突.

Microsoft的ADO文档声明这将失败.我们可以在ADODB.pas中看到它发生.对于简单的一个变量定位和定位包含多个变量.

我们没有选择在WHERE字符串的标准查询中进行这些定位,因为它们处于紧密循环中.

问题:FireDAC有这个问题吗?有人可以帮我们一个忙,实际上尝试以上.在FireDac中定位吗?

从ADO迁移到Firedac会遇到什么令人不快的"惊喜"?

谢谢.

delphi ado firedac

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

基于Excel VBA,创建ADODB对象或使用DOCMD.RUNSQL是否更好?哪个是pro&contra?

根据标题,创建ADODB对象或访问对象是否更好然后使用DOCMD.runsql?我通常使用Excel工作表和访问表.哪种方法更快,更灵活可靠?有一些细节是赞成还是反对?

vba ado adodb excel-vba access-vba

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

标签 统计

ado ×10

delphi ×3

vba ×3

excel ×2

odbc ×2

sql-server ×2

vb6 ×2

vbscript ×2

access-vba ×1

adoconnection ×1

adodb ×1

asp-classic ×1

date ×1

excel-vba ×1

firedac ×1

mysql ×1

sql ×1

wsh ×1