我需要填充符合我的IF
語句中條件的字段的VBA數組。我無法圍繞創建記錄集中的數組進行包裝,它看起來像一個完全不同於我的「普通」數組的世界。以下是我有:從VBA記錄集創建數組
回答
您可以使用下面的函數來生成提取你想要什麼,然後可以從該.GetRows()
所需的SQL。它使用ADO,因此您需要添加對ADO的引用。基於以上,你可以用它來生成INSERT INTO from (function return)
像docmd.runsql "INSERT INTO tbl_TEST_Clone " & GEN_SQL_TABLE("tbl_test")
Option Explicit
Function GEN_SQL_TABLE(strTableName As String) As String
Dim r As New ADODB.Recordset
Dim rKeys As New ADODB.Recordset
Set r = CurrentProject.Connection.OpenSchema(adSchemaColumns, _
Array(Empty, Empty, strTableName, Empty))
r.Filter = "[DATA_TYPE]<>" & adWChar
Set rKeys = CurrentProject.Connection.OpenSchema(adSchemaPrimaryKeys, _
Array(Empty, Empty, strTableName))
While Not r.EOF
If Not rKeys.BOF Then rKeys.MoveFirst
rKeys.Filter = "[COLUMN_NAME]='" & r.Fields("COLUMN_NAME").value & "'"
If rKeys.EOF Then
GEN_SQL_TABLE = _
GEN_SQL_TABLE & IIf(Len(GEN_SQL_TABLE) > 0, ",", "") & _
r.Fields("COLUMN_NAME").value
End If
rKeys.Filter=""
r.MoveNext
Wend
GEN_SQL_TABLE = "SELECT " & GEN_SQL_TABLE & " FROM " & strTableName
r.Close
rKeys.Close
Set r = Nothing
Set rKeys = Nothing
End Function
這看起來像一個很好的函數,但在這個項目中,我非常依賴DAO,我不相信你可以在一個數據庫上同時使用ADO和DAO。 Def保存到文本文件以供稍後存儲:) –
您可以同時執行這兩個操作,我的前綴爲ADODB類名稱,表示您的表格有100個字段,全部爲非文本,您的方法將執行100次插入每行。看看這個,一個SQL操作,不管你是在DAO runsql還是ADO的execute上運行。 http://www.w3schools.com/sql/sql_insert_into_select.asp –
由於註釋提供關於在由@KazimierzJawor操縱方向 - > 這是我能拿出的是完成我是什麼後的語法。 (需要添加錯誤處理,但這種通過是第一次運行)
Function Blue()
Dim CreateTableSQL As String
Dim fld As DAO.Field
Set db = CurrentDb()
CreateTableSQL = "CREATE TABLE [GreenSocks] (FieldPK COUNTER CONSTRAINT PrimaryKey PRIMARY KEY, fieldname TEXT);"
db.Execute CreateTableSQL
Set rs2 = db.OpenRecordset("___TestTable")
For Each fld In rs2.Fields
If fld.Name <> "ID" And fld.Name <> "Store Number" Then
If FieldTypeName(fld) <> "Text" Then
Debug.Print fld.Name
strSQL = "INSERT INTO GreenSocks (fieldname) VALUES ('" & fld.Name & "');"
DoCmd.RunSQL strSQL
End If
End If
Next
Set fld = Nothing
rs2.Close
strSQL = "select fieldname from GreenSocks"
Set rs3 = db.OpenRecordset(strSQL)
For Each fld In rs3.Fields
Debug.Print fld.Value
secondSQL = "ALTER TABLE __TestTable ALTER COLUMN [" & fld.Value & "] TEXT(40);"
DoCmd.RunSQL secondSQL
Next
Set fld = Nothing
rs3.Close
End Function
- 1. 嘗試從數組創建DAO記錄集
- 2. 從記錄集創建字段名稱
- 3. VBA/SQL記錄集
- 4. 創建分層記錄集
- 5. 使用SQL語句在VBA中創建記錄集
- 6. 使用VBA在Access中創建記錄集
- 7. 在訪問2010 vba中創建記錄集的郵件列表?
- 8. 訪問VBA項目..創建循環以通過記錄集
- 9. 從VBA中的數組創建CSV
- 10. 從VBA範圍創建數組
- 11. VBA - 從命名範圍創建數組
- 12. Ember.JS用hasMany數組創建記錄
- 13. SQL:使用多個記錄集創建一個記錄集
- 14. VBA ADODB更新記錄集
- 15. 訪問VBA記錄集
- 16. VBA記錄集問題
- 17. excel vba函數返回記錄集
- 18. VBA中的記錄集計數
- 19. 從2d numpy數組創建數據的歷史記錄?
- 20. 如何從數據庫記錄中創建json數組
- 21. TensorFlow從numpy數組創建數據集
- 22. SQLite:按月創建組記錄並獲得每月記錄數
- 23. 從XmlAttributeCollection創建記錄
- 24. VBA - 創建數組存儲數組
- 25. 從數據庫記錄創建路由
- 26. VBA代碼來更新/創建新的記錄從Excel到訪
- 27. 通過在Excel VBA中的另一個記錄集上執行查詢來創建新記錄集
- 28. T-SQL循環創建記錄集
- 29. 在新地區創建AWS記錄集
- 30. VBA ADODB excel - 從記錄集中讀取數據
從記錄移動到數組,你可以使用簡單的方法:'rs2.GetRows()'。但是,首先您需要根據SQL查詢創建正確的記錄集結果,您可以在其中排除「ID字段」和其他「文本類型」。 –
@KazimierzJawor - 比我最初想象的還要大。感謝您張貼,以允許我的谷歌的起點:) –
這裏真的*新鮮*答案:http://stackoverflow.com/questions/41485788/dynamically-populate-vba-array/41486069#41486069 –