在我的项目中,我试图将excel表中的无限输入保存到数据库中(访问)。我正在尝试使用vba这样做。但是,因为我不知道条目将持续多长时间,并且我无法在数据库中创建这么多字段以适应未知数量的条目。我不能将数组变量插入表中的一个字段。我怎么能这样做?
说我在下面。
Dim SN(100) As String
SN(0)=123 'value of each entry
SN(1)=2412
'so on and so many entries
然后在SQL语句中,
"INSERT INTO [TableName] ([FieldName]) Values (SN)"
它会说运行错误“13”类型不匹配。
数据库字段是否可以接受列表或数组作为数据类型?所以当我调用数据时,我可以使用索引来调用列表中的变量吗?
答案 0 :(得分:1)
MS Access没有这样的数据类型,更原始的类型,如string,boolean,long。但是考虑使用Join
将数组中的所有项连接到一个字符串中,并将该字符串保存到数据库表中。然后根据需要使用Split
拉回数组:
Sub ArrayIntoSQL()
Dim SN(100) As String, TN() As String
Dim SNstr As String,
SN(0) = 123 'value of each entry'
SN(1) = 2412
SNstr = Join(SN, "|") ' PIPE DELIMITER '
'123|2412|||||||||||||||||||||||||||||||||||||||||||||_
||||||||||||||||||||||||||||||||||||||||||||||||||||||'
strSQL = "INSERT INTO [TableName] ([FieldName]) Values ('" & SNstr & "')"
...
End Sub
Sub ArrayOutofSQL()
Dim SN() As String
Dim SNstr As String
strSQL = "SELECT [FieldName] FROM [TableName]"
...
Do While Not rst.EOF
SN() = Split(rst!FieldName, "|")
rst.MoveNext
Loop
...
End Sub
由于数组项可能超过短文本数据类型的Access'255字符限制,因此请使用长文本类型(以前称为备忘录 )没有声明的限制。
但是,对于最佳实践,宽表(多列)和字段中的数组等存储对象比长表(多行)和链接对象更昂贵。所以只需迭代地保存数据:
For Each item in SN
strSQL = "INSERT INTO [TableName] ([FieldName]) Values (" & item & ")"
...
Next item
当然,使用ID
,Person
,Date
等标识符保存值!