我正在编写一个Delphi 7应用程序,它需要同时从许多不同的线程访问同一个SQL Server数据库.
我可以使用单个共享TADOConnection,还是每个线程都必须创建自己的?
我想知道是否有人可以帮忙:
长话短说,我正在使用MSSQL2005来构建一个Pivot表.正在检查的数据受日期范围限制(从最近的星期一到所选日期的所有数据为1周)
当我运行存储过程并传递一个日期时,我得到正确的表格,例如:
时间 | 09年1月1日 | 2009年1月2日 | 2009年1月3日 | ...
09:00 | 0 | 9 | 25 | ...
09:30 | 8 | 27 | 65 | ...
10:00 | 20 | 44 | 112 | ...
(对于残暴的"表格"格式表示道歉).
我唯一的问题是列标题将根据传入SP的日期(所需的视图日期)和SP内的逻辑(强制左侧列为最接近的星期一)而变化指定).
这意味着当我向用户显示结果时,我(当前)需要复制经典ASP中的日期检查逻辑[容易但可维护性失败]
我真正需要的是一种从记录集本身检索列名的方法.
有人可以指点我正确的方向吗?
我用Google搜索了但是我得到的所有结果似乎都与读取表格模式有关 - 在这种情况下这没有用,因为我的表格是在内存中动态生成的.
非常感谢您提供的任何帮助
我试图获得一些旧的VB6代码与SQL Server Compact一起使用.
我可以连接,打开数据库,一切似乎都很好.我可以运行插入选择命令.
但是,ADODB.Recordset RecordCount属性始终返回-1,即使我可以访问Fields并查看数据.更改CursorLocation = adUseClient会在执行SQL(多步操作生成错误)时导致问题.
Option Explicit
Private Const mSqlProvider As String = "Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;"
Private Const mSqlHost As String = "Data Source=C:\Database.sdf;"
Private mCmd As ADODB.Command ' For executing SQL
Private mDbConnection As ADODB.Connection
Private Sub Command1_Click()
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Dim DbConnectionString As String
DbConnectionString = mSqlProvider & _
mSqlHost
Set mDbConnection = New ADODB.Connection
mDbConnection.CursorLocation = adUseServer
Call mDbConnection.Open(DbConnectionString)
If mDbConnection.State = adStateOpen Then
Debug.Print (" Database is open")
' …Run Code Online (Sandbox Code Playgroud) 我试图避免在我的网络应用程序中使用直接的SQL查询.我环顾四周并得出结论,ADO Recordset将是最好或最安全的工具.我需要将记录插入数据库表.不幸的是,我不知道如何获得刚刚插入的记录的标识值.这是我现在所拥有的减少:
<%
dim insertID, rs
set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "my_table_name", conn, adOpenForwardOnly, adLockOptimistic
rs.AddNew()
Call m_map_values_to_rs(rs)
rs.Update()
insertID = rs("id")
rs.Close()
rs = Nothing
%>
Run Code Online (Sandbox Code Playgroud)
我的代码是成功插入记录,但我不能为我的生活弄清楚如何获取Recordset插入后更新的id字段.如何从此获取标识列值Recordset?
更新 - 这是关于上面代码的解决方案.
我不得不改变光标类型adOpenKeyset而不是adOpenForwardOnly.执行此操作后,记录将在插入后使用"自动编号"字段的新值自动更新.然而,这不是你的想法.值rs("id")不会变成整数甚至变量.它变成某种Automation类型,不能作为数字进行评估.出于某种原因,CInt()也不能直接用于该类型.所以你必须做的是将值转换为字符串,然后将其转换为Int.以下是我管理的方式:
insertID = CInt( rs("id") & "" )
Run Code Online (Sandbox Code Playgroud)
感谢Dee的回答.它帮助极大.
您可以在Delphi中使用以下值指定TADOStoredProc.ProcedureName:
MSSQLProcedureName;1
Run Code Online (Sandbox Code Playgroud)
但是这个值中的"1"是什么?
谢谢您的帮助!
是否可以像SELECT在Excel中的VBA 一样进行查询,这样我就可以从Excel查询PostgreSQL数据库了?
如果可能,请解释我如何连接到数据库.我在谷歌看,但没有找到结果.
我正在使用Delphi中的查询管理器ADO,我需要知道查询将返回的所有字段,无论它们有多复杂和多少连接.我想调用一个函数,返回给我,将在特定查询中返回的所有字段,以及字段信息,如表格中的字段.
在使用php的mysql中,我有命令mysql_field_table,在这个命令中我传递结果对象和字段索引,这个命令为我返回表名.
嗯,这是我的梦想,从查询中的字段索引中获取表名,如:
SELECT * FROM TableOne Left Join Table2 ON Table2.MasterField = Table1.KeyField
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用ADO连接到SQL Server数据库.密码包含一个空格作为最后一个字符.构建连接字符串时,如何转义密码?
MSDN说它用单引号或双引号,但这似乎不起作用......
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring.aspx
这是我的连接字符串的样子:
Provider=SQLOLEDB;Persist Security Info=False;Initial Catalog=master;Data Source=test;uid=john;pwd="123 "
Run Code Online (Sandbox Code Playgroud)
谢谢
我的VBA模块中有一个填充的ADO记录集.我在ACCESS中也有一个表,它与记录集具有完全相同的结构.
现在我使用遍历每个数据集记录的循环(这很好)来填充表格.
我想知道:有没有办法将整个记录集插入访问表?(更重要的是:这会明显加快)
我在MS Access 2010上遇到了令人沮丧的问题,我现在在这个问题上有资格作为一个bug.在尝试了所有可能的解决方法之后,我没有想法并且依赖于你.
巨大的Access Access 2010应用程序,具有25k行VBA和> 50个表单.它有一个客户端服务器体系结构,其前端已编译,网络上有Access后端.它连接到二十几个不同的数据库(Oracle/SQL Server/Sybase IQ).
有时,当我将ADODB记录集分配给子表单时,其数据不会显示在绑定字段中.我#Name?到处都是
数据就在那里.我可以debug.print,我可以在Watches浏览器中看到它,我可以在使用代码循环记录集对象时读取或操作它.它只是没有出现在子表单中.
它可以在几个月内完美地工作,突然一个表格将开始出现这个问题而没有任何明显的原因(即使在我没有改变的表格上也可能发生).当它发生时,它适用于所有用户,所以这在前端accdb/accde中确实是错误的.
该问题与特定的DBMS /驱动程序无关.Oracle或Sybase数据可能会发生这种情况.
我创建了自己的类,抽象出与ADO连接和查询相关的所有内容,并在各处使用相同的技术.基于它,我有十分之几的表格,而且大多数表现都很完美.
我在我的应用程序的几个部分中遇到了这个问题,特别是在具有大量子表单和代码的高度复杂的表单中.在这个主表单上,一些子表单有问题,而其他子表单没有.它们具有完全相同的参数.
这就是我填充表单记录集的方式:
Set RST = Nothing
Set RST = New ADODB.Recordset
Set RST = Oracle_CON.QueryRS(SQL)
If Not RST Is Nothing Then
Set RST.ActiveConnection = Nothing
Set Form_the_form_name.Recordset = RST
End If
Run Code Online (Sandbox Code Playgroud)
调用的代码Oracle_CON.QueryRS(SQL)是
Public Function QueryRS(ByVal SQL As String, Optional strTitle As String) As ADODB.Recordset
Dim dbQuery As ADODB.Command
Dim Output As ADODB.Recordset
Dim dtTemp As …Run Code Online (Sandbox Code Playgroud)