我已经使用下面给出的建议更新了代码,我已经测试并且工作得很好,以便为将来的用户提供快速参考.
我正在使用以下代码创建链接表而无需为每个用户设置DSN,如何指定主键,因为如果手动连接则会询问您:
Dim sConnect As String
Dim db As DAO.Database
Dim tdf As DAO.TableDef
Set db = CurrentDb
Set tdf = db.CreateTableDef
tdf.Name = "dbo_vwFeedback" ' - -- --- This is the Label that you see in Access...
tdf.Connect = "ODBC;DRIVER=SQL Server;SERVER=server01\serverinstance;DATABASE=db_name;Trusted_Connection=Yes"
tdf.SourceTableName = "vwFeedback" ' - -- --- This is the actual name in SQL Server, minus the owner.
db.TableDefs.Append tdf
CurrentDb.Execute "CREATE UNIQUE INDEX PK_dbo_vwFeedback_PrimaryKey ON dbo_vwFeedback (DataSetID, FeedbackRef) WITH PRIMARY"
Run Code Online (Sandbox Code Playgroud)
注意:以上是针对SQL Server VIEW,它对于SQL Server TABLE是相同的,但您不需要该CurrentDB.Execute行(如果您的主键在服务器上正确设置). …
我有以下PHP函数来确定数据库中的下一行和上一行.但是,有很多情况下可以删除行,因此我的函数不能正常工作,因为它们只会减少auto_increment字段.
例如,当前行5.我的函数给出:4(上一个)和下一个(下一个).如果删除6和7怎么办?我最好的想法是继续查询,直到我排好,但这似乎效率低下,有更好的方法吗?
谢谢大家
//function to get next tweet
function getNextTweet($key, $direction){
$sql = "SELECT tweet_id FROM tweets WHERE tweet_key = '$key' LIMIT 1";
$result = mysql_query($sql) or die("DB Error : ". mysql_error());
$result = mysql_fetch_assoc($result);
if($direction=='next'){
$tweet_id = $result['tweet_id'] + 1;
}else{
$tweet_id = $result['tweet_id'] - 1;
}
$sql = "SELECT * FROM tweets WHERE tweet_id = '$tweet_id' LIMIT 1";
$result = mysql_query($sql) or die("DB Error : ". mysql_error());
return mysql_fetch_assoc($result);
}
Run Code Online (Sandbox Code Playgroud) 我想根据某些条件阻止 ADORecordset 的滚动。
例如,做这样的事情会很方便:
procedure TfrmMain.qryCenyBeforeScroll(DataSet: TDataSet);
begin
if not (condition) then
qryCeny.DoNotScroll; //Just the idea
end;
Run Code Online (Sandbox Code Playgroud)
这该怎么做?
我试图以下列方式以循环方式将销售人员(rsSalespeople)分配给客户(rsCustomers):
自从我处理VBA以来已经有一段时间了,所以我有点生疏,但到目前为止,这是我想出来的:
Private Sub Command31_Click()
'On Error GoTo ErrHandler
Dim intCustomer As Integer
Dim intSalesperson As Integer
Dim rsCustomers As DAO.Recordset
Dim rsSalespeople As DAO.Recordset
Dim strSQL As String
strSQL = "SELECT CustomerID, SalespersonID FROM Customers WHERE SalespersonID Is Null"
Set rsCustomers = CurrentDb.OpenRecordset(strSQL)
strSQL = "SELECT SalespersonID FROM Salespeople"
Set rsSalespeople = CurrentDb.OpenRecordset(strSQL)
rsCustomers.MoveFirst
rsSalespeople.MoveFirst
Do While Not rsCustomers.EOF
intCustomer = rsCustomers!CustomerID
intSalesperson = rsSalespeople!SalespersonID
strSQL = "UPDATE Customers SET SalespersonID = …Run Code Online (Sandbox Code Playgroud) 我刚开始使用记录集,我正在研究从sql server检索记录集然后我需要循环遍历excel电子表格中的值.
记录集中字段的顺序已经是正确的,所以我应该能够在一个范围内从一个单元移动到单元格粘贴每个值,但我不确定如何做到这一点.我知道记录集是正确的,因为我把它输出到一个文件,一切都按顺序查看.
到目前为止这是我的代码:
Public Sub retrieve()
Dim rsTest As ADODB.Recordset
Set rsTest = New ADODB.Recordset
Set rsTest = DataManager.GetData()
Sheets("Planners").Activate
Dim cel As Range
Dim i As Integer
Dim rsFields As Variant
Do While Not rsTest.EOF
For Each cel In ActiveSheet.Range("A3:H1000").Cells
For Each rsFields In rsTest.Fields
cel = rsTest(rsFields.Name)
Next
Next
Loop
End Sub
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的帮助.
我以前在VB.net工作并且在使用ADO时一直使用Dataset,但现在我正在使用C#,而研究正在向我展示很多Recordset.
它们是一样的吗?
如果没有什么区别?
在 Excel 中,我使用 ADODB 连接来构建记录集,从其自己的工作簿中的工作表中获取数据,如下所示:
Public Sub test()
Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim strSQL As String
Dim k As Variant
cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & ThisWorkbook.Path & "\" & ThisWorkbook.Name & ";" & _
"Extended Properties=""Excel 12.0;HDR=No;IMEX=1;Readonly=False"";"
strSQL = "SELECT F1 FROM [Workbench$];"
rst.Open strSQL, cnn, adOpenStatic, adLockOptimistic
rst.MoveFirst
While Not rst.EOF
rst("F1") = "NewValue"
rst.Update
rst.MoveNext
Wend
End Sub
Run Code Online (Sandbox Code Playgroud)
但是,运行代码时出现错误:
运行时错误“-2147217911 (80040e09)”:
无法更新。数据库或对象是只读的。
我已经检查了我打开的工作簿的权限,没问题(每个人都可以完全控制访问)。
我在这里做错了什么?
在下面的代码中,我在行读取时出错recset.Close.
字符:5
错误:关闭对象时不允许操作.
代码:800A0E78
来源:ADODB.Recordset
如果程序到达该行PQ_ID_number = InputBox("Enter PQ Database ID number, Do not use / ? < > \ : * | !", "PQ ID Number", "Replace Text")似乎工作正常(采取手动输入),但当它试图从浏览器的URL(自动)获取ID时,它会给出错误.
valid_name = 0
Dim objInstances, objIE, counterTab
Do While valid_name = 0 'Flag to exit the loop if the Id number has content in the SQL Database'
'-----------------------------------------------------------------------------------------'
Set objInstances = CreateObject("Shell.Application").windows
If objInstances.Count > 0 Then '/// make sure we have IE instances open.
'Loop through …Run Code Online (Sandbox Code Playgroud) 我想知道是否有人可以帮助我。我正在尝试从 sql 表返回的记录集填充公共字典。
除了一部分外,一切似乎都很好。我不知道它是否没有正确计算字典中的键数,或者它们没有被正确输入,但是无论出于何种原因,当我尝试显示总计数时,它总是只返回 1(应该是大约 15) 并且只显示第一行详细信息。
任何人都可以帮忙吗?
Public UserList As New scripting.Dictionary
Sub UserDL()
Dim USList As Range
Dim USArr(0 To 11) As Variant
Call ConnecttoDB
Set Cmd = New adodb.Command: Set rs = New adodb.Recordset
With Cmd
.CommandTimeout = 30
.ActiveConnection = cn
.CommandText = "CSLL.DLUsers"
Set rs = .Execute
End With
With rs
If Not .BOF And Not .EOF Then
.MoveLast
.MoveFirst
While (Not .EOF)
For i = 1 To 11
USArr(i - 1) = rs(i)
Next …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个函数来循环遍历连续子表单中的记录并清除每个记录的特定字段(Entity_Under_Consideration,它是由子表单上的组合框表示的查找字段)中的值。
以下不起作用。它也不会抛出任何错误。谁能看到我哪里出错了?
Public Function clearEUCData(subform As Control)
'take a clone of the subform's recordset
Dim entityRecSet As Recordset
Set entityRecSet = subform.Form.Recordset.Clone()
'if there are any records in the subform...
If entityRecSet.RecordCount > 0 Then
'start with the first record
entityRecSet.MoveFirst
'iterate through each row, clearing the data in the EUC field
Do Until entityRecSet.EOF
With entityRecSet
.Edit
Entity_Under_Consideration = 0
.Update
End With
entityRecSet.MoveNext
Loop
End If
'close and purge the cloned recordset
entityRecSet.Close
Set entityRecSet = Nothing
End …Run Code Online (Sandbox Code Playgroud)