我似乎对这个问题一无所知。我可以将 ADO 记录集附加到表单,但我不确定如何处理更新。我不想只使用 UpdateBatch,我希望能够检测出于日志记录目的而更改的内容。任何人都可以指出我正确的方向吗?
提供的 SQL 包含一个 Key 字段,它是一个名为“ID”的自动编号。
Private Sub Form_Load()
Dim rst as Object
Set rst = CreateObject("ADODB.Recordset")
rst.CursorLocation = adUseClient
'...edit out connection
rst.Open sql, mConnection, adOpenStatic, adLockBatchOptimistic
set rst.ActiveConnection = Nothing
Set Me.Recordset = rst
End Sub
''Edit records on the form and now click save
Private Sub cmdSave_Click()
Dim rst As Object
Set rst = Me.Recordset
Set rst.ActiveConnection = GetConnection
rst.UpdateBatch
'How do I detect deleted, added, or modified records for logging?
End Sub
Run Code Online (Sandbox Code Playgroud) 我试图用以下代码查询MySQL数据库:
'declare the variables
Dim Connection
Dim Recordset
Dim SQL
'declare the SQL statement that will query the database
SQL = "SELECT * FROM CUSIP"
'create an instance of the ADO connection and recordset objects
Set Connection = CreateObject("ADODB.Connection")
Set Recordset = CreateObject("ADODB.Recordset")
'open the connection to the database
Connection.Open "DSN=CCS_DSN;UID=root;PWD=password;Database=CCS"
Recordset.CursorType=adOpenDynamic
'Open the recordset object executing the SQL statement and return records
Recordset.Open SQL,Connection
Recordset.MoveFirst
If Recordset.Find ("CUSIP_NAME='somevalue'") Then
MsgBox "Found"
Else
MsgBox "Not Found"
End If
'close the …Run Code Online (Sandbox Code Playgroud) 我正在尝试pre-view判断 的字段recordset是否为空/空。
If IsNull(rs.Fields("fieldname")) = True Then ...
If IsNull(rs.Fields("fieldname")).Value = True Then ...
if IsNull(rs.Fields("fieldName").Value) Then...
Run Code Online (Sandbox Code Playgroud)
所有这些方法都会引发错误......为什么?recordset在将它的值赋给变量之前,如何检查它是否为空。
正如标题所示,我正在研究将查询内容存储到数组中的不同方法。我一直在尝试不同的方法,但似乎大多数方法的输出都是正确的。这当然是因为我不了解如何正确地完成此操作,因此经过一段时间的实验后,我决定问最好的方法是什么?我将与您分享迄今为止我的一些方法,您可以看到我的调查对我的影响。
Dim MyArray() As Variant
MyArray = rst.GetRows(rst.RecordCount)
Run Code Online (Sandbox Code Playgroud)
这没问题,但它垂直而不是水平存储所有信息。有办法翻转吗?这是通过使用 ReDim 实现的吗?或者这是因为行存储在数组维度中,因此它们自然垂直?
Index = 0
Do While Not rst.EOF
ReDim Preserve MyArray(1, Index)
MyArray(0, Index) = CStr(rst.Fields(0).Value)
'Safety check to make sure the value isn't null (was having problems before)
If rst.Fields(1).Value <> vbNullString Then
MyArray(1, Index) = CStr(rst.Fields(1).Value)
End If
Index = Index + 1
rst.MoveNext
Loop
sheet.Range("a1:ba10000").Value = MyArray
Run Code Online (Sandbox Code Playgroud)
这再次垂直存储内容,但没有正确输出记录,实际上只提取每个记录的前两列信息,其余的输出为#N/A#。我认为我更接近我原来的方法,但我决定尝试可能会让我到达某个地方。
你们有什么建议或者能给我指出正确的方向吗?
我使用Access 2003通过ADO访问存储在SQL Server数据库中的数据.通常我使用存储过程获取数据.我通过ADO在一个返回记录集的单独函数中执行存储过程.从函数返回记录集时,哪个是关闭记录集的最佳位置并释放它在内存中的保留?它是在返回记录集的函数中完成的,还是在调用执行ADO代码的函数的子/函数中完成的?这是一个例子......
这是调用方法
Public Sub CallingMethod()
Dim rs As ADODB.Recordset
Set rs = GetDataFromDatabase()
Set myListBox.Recordset = rs
rs.Close
Set rs = Nothing
End Sub
Run Code Online (Sandbox Code Playgroud)
下面是实际执行存储过程并将其返回给调用方法的方法
Public Function GetDataFromDatabase()
Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cnn = New ADODB.Connection
cnn.ConnectionString = myConnectionString
cnn.Open
Set rs = New ADODB.Recordset
Set rs.ActiveConnection = cnn
rs.Source = "EXEC uspMyStoredProcedure"
rs.LockType = adLockOptimistic
rs.CursorType = adOpenStatic
rs.CursorLocation = adUseClient
rs.Open
Set GetDataFromDatabase = rs
Set rs = Nothing
Set cnn …Run Code Online (Sandbox Code Playgroud) 有以下场景.我有一些表单,基本上有一些dropbox,列表等.我用ms sql db中的记录填充它们.但是,有没有办法只查询一次数据库并在整个应用程序生命周期中将记录存储为类的实例,而不是每次用户打开表单时查询?
连接如下:
Sub connection_test()
Dim Cn As ADODB.Connection
Dim Rs As ADODB.Recordset
Dim stSQL As String
stSQL = "SELECT * FROM dbo.Client"
Set Cn = New ADODB.Connection
With Cn
.CursorLocation = adUseClient
.Open CONNECTION_STRING
.CommandTimeout = 0
Set Rs = .Execute(stSQL)
End With
Rs.Close
Cn.Close
Set Rs = Nothing
Set Cn = Nothing
End Sub
Run Code Online (Sandbox Code Playgroud)
有人可以为我建议一个解决方案吗?我可以看到来自交通繁忙的所有问题,而且大部分是不必要
我正在使用sql server 2005在vb6中编写应用程序.这是我当前的代码.
Dim Sqlstring As String
Dim rstCurrentTicket As Recordset
Sqlstring = "Select SubmiterName, LastViewDate, Department, Description, Urgency, SubmitDate, ResolvedDate from TroubleTickets where Title ='" + Trim(TicketComboBox.Text) + "'"
Set rstCurrentTicket = cnnSel.OpenRecordset(Sqlstring)
NameText.Text = rstCurrentTicket!SubmiterName
DeptText.Text = rstCurrentTicket!Department
Me.DescriptionText = rstCurrentTicket!Description
Me.UrgencyText = rstCurrentTicket!Urgency
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,我收到一个错误代码说:
"运行时错误:'3021'""没有当前记录"
它强调了这一行代码:
NameText.Text = rstCurrentTicket!SubmiterName
Run Code Online (Sandbox Code Playgroud)
有关如何解决此问题的任何建议?
我有一些代码可以从数据库中读取记录。当我阅读时,recordset变量将表值修改为其自己的格式。例如:
在数据库中
时间值为12345(不是日期和时间),但是当记录集读取它时,它的出现例如:23-06-2012 10:15:23
我只是发现记录集本身在执行后以其自己的格式存储值。
Set rs = CmdSqlData.Execute()
那么有什么方法可以将记录集定义为String?
这是代码。
Dim rs As ADODB.RecordSet
Set rs = CmdSqlData.Execute()
Do While (rs.EOF = FALSE And rs.BOF = FALSE)
p = rs.GetRows(1)
cell(1,1) = p(0,0)
Loop
Run Code Online (Sandbox Code Playgroud)
任何人都可以让我知道如何以String形式读取数据(因为它在数据库中),以便不会发生格式更改。
注意:由于其他要求,我无法转换Excel单元格格式,但我想将所有内容读取为表中的字符串
我不是一个ASP开发人员,所以有点迷失.
我有以下数据访问代码:
sSQL = "SELECT answer_id, company_name, old_access_company_name, answer, flag_asker_notified FROM Q01_ask_sheiiba_answer_company2 WHERE question_id="& sQuestion_id &" ORDER BY answer_id"
rs.open sSQL, conn
DO WHILE NOT rs.EOF
Response.Write(rs.Fields("answer"))
rs.MoveNext
LOOP
Run Code Online (Sandbox Code Playgroud)
我已经通过在调用之前将其输出到响应来测试sql查询是否正确构建.它产生以下查询:
SELECT answer_id, company_name, old_access_company_name, answer, flag_asker_notified
FROM Q01_ask_sheiiba_answer_company2
WHERE question_id=988
ORDER BY answer_id
Run Code Online (Sandbox Code Playgroud)
当我将那个确切的查询复制到sql management studio并运行它时,我得到5行的预期结果,每行包含每个单元格中的数据,但是,当我通过上面的代码运行它时,我获得了相同的5行相同的单元格数据,列为EXCEPT answer,为空!
我错过了什么?
提前致谢
由于这里遇到的问题,我正在使用 DAO 记录集来更新表。
当我知道我正在更新的字段的名称时,这很好用,例如:
rs2.AddNew
rs2![ContactID] = rs.Fields(0).Value
rs2![Fee Protection Insurance] = "" & strValue & ""
rs2.Update
Run Code Online (Sandbox Code Playgroud)
完美地工作。
但是,我尝试更新的字段并不总是具有相同的名称,因此我也尝试在这里使用一个变量,希望它能够评估并与上述代码等效:
rs2.AddNew
rs2![ContactID] = rs.Fields(0).Value
rs2!["strFieldName"] = "" & strValue & ""
rs2.Update
Run Code Online (Sandbox Code Playgroud)
但它告诉我该项目不在集合中,即使 strFieldName 设置为费用保护保险也是如此。
我已经尝试了各种方法,包括:
rs2![" & strFieldName & "] = "" & strValue & ""
rs2![strFieldName] = "" & strValue & ""
rs2!["" & strFieldName & ""] = "" & strValue & ""
rs2![cStr(strFieldName)] = "" & strValue & ""
Run Code Online (Sandbox Code Playgroud)
没有一个工作。
我是在以错误的方式解决这个问题,还是我在尝试不可能的事情?