【问题标题】:How to Split a String and Store in MS Access table如何拆分字符串并存储在 MS Access 表中
【发布时间】:2015-12-23 20:36:12
【问题描述】:

我希望能够拆分已在 MS Access 表单上的文本框中输入的文本字符串,并将拆分的字符串作为单独的记录存储在同一字段下。这是我到目前为止的代码,但我在每个角落都遇到了问题。我对此很陌生,但学得很快。任何帮助表示赞赏。

这是我想要完成的:如果我在文本框中输入以下文本(“这是一个句子”)并点击提交。我希望彼此将单词存储为公共字段下的单独记录。看似简单,却让人头疼。

Private Sub Submit_Click()

    Dim SetDBConnection As ADODB.Connection
    Set SetDBConnection = CurrentProject.Connection

    Dim strInsertRecord As String

    Dim strNewPhrase As String
    Dim strStorePhrase As String

    strNewPhrase = textPhrase
    strStorePhrase = Split(NewPhrase)

    strInsertRecord = "INSERT INTO [FieldSplice] (words) VALUES (" & strStorePhrase & ")"
    SetDBConnection.Execute strInsertRecord

    textPhrase.Value = Null
End Sub

【问题讨论】:

  • 你应该指定你卡在哪里
  • 没有individual records under a common field 这样的东西。要么您尝试做一些数据库不做的事情,要么您使用了错误的术语来描述您的问题。数据库表上的每条记录对于每个字段都有唯一的值。除非您使用多条记录,否则您不能在单个字段中存储多个值。如果这是您想要做的,那么您必须遍历数组 strStorePhrase 的成员并为每个成员使用 INSERT 语句。而strStorePhrase需要声明为数组:Dim strStorePhrase() As String
  • 这是您的代码中的一个问题:strStorePhrase = Split(NewPhrase) 这是一个问题,因为Split() 返回一个数组,而strStorePhrase 是一个普通的String 变量......所以不能接受一个数组.

标签: string vba ms-access split


【解决方案1】:

我有点不清楚你为什么有 ADODB 连接...这是连接到外部数据库吗?如果是这样,那是有道理的,但是您缺少一些代码来使插入正常工作。

如果这只是一个内部(本机)访问表,那么我认为您不需要任何这些。这是一个简单的示例,说明如何获取一个字符串,将其拆分为单词(基于空格),然后将它们插入到您的表格中:

Dim textPhrase As String
Dim words() As String
Dim i As Integer

textPhrase = "This is a test"
words = Split(textPhrase, " ")

sql = "parameters P1 text; INSERT INTO [FieldSplice] (words) VALUES ([P1])"

Set query = CurrentDb.CreateQueryDef("FsInsert", sql)

For i = LBound(words) To UBound(words)
  query.Parameters("P1").Value = words(i)
  query.Execute
Next i

CurrentDb.QueryDefs.Delete ("FsInsert")

另一个有趣的注意事项——您不需要每次都声明插入。您可以设置参数,为参数赋值并多次执行插入命令。这包含在我上面的示例中。

您的代码试图说:

insert into [table] (field) values ("value1", "value2", "value3")

这是你做不到的。这必须作为三个插入来完成,除非您的数据库支持数组插入(例如 Oracle)。

多个字段只能这样工作:

insert into [table] (field1, field2) values ("value1", "value2")

每个值对应表中的一列。

【讨论】:

  • 感谢您的所有帮助 Hambone(非常感谢),我被这两行所困扰。如何正确设置参数?我对 P1 实际上是什么感到有点困惑。 sql = "parameters P1 text; INSERT INTO [FieldSplice] (words) VALUES ([P1])" Set query = CurrentDb.CreateQueryDef("FsInsert", sql) 还有什么我可以为您提供的可以让您更轻松的吗明白吗?这是我在 stackoverflow 上发布的第一个问题。
  • 我设法让您的代码正常工作。需要注意的一件事是,我必须将代码中的“Set query =”语句更改为“set qdf =”。你知道为什么吗?这是最终代码: Private Sub Command8_Click() Dim textPhrase As String Dim words() As String Dim i As Integer textPhrase = phrase words = Split(textPhrase, " ") SQL = "parameters P1 text;INSERT INTO [FieldSplice] ( words) VALUES ([P1])" Set qdf = CurrentDb.CreateQueryDef("FsInsert", SQL) For i = LBound(words) To UBound(words) qdf.Parameters("P1").Value = words(i) qdf .Execute Next i CurrentDb.QueryDefs.Delete("FsInsert") End Sub
  • 非常感谢您的帮助。节日快乐。
  • qdf 只是变量名......看起来我忘记了Dim 我的名为“query”的变量作为 QueryDef。我的错。也许您在其他地方将查询定义为字符串,这就是为什么它不起作用但 qdf 没有?至于 P1,这只是绑定变量的名称。你可以随意命名它。 P1 有点通用——参数 1。只要两个语句之间的变量是一致的,它就可以是你想要的任何东西。无论如何,我很高兴你让它工作。感谢您的美言,祝您圣诞节愉快
  • 顺便说一下,这里有一个更全面的 Access 中插入多列的参数示例:stackoverflow.com/questions/34023850/… 请记住,Access 参数与使用 ADO.net 的 RDBMS 的常规参数
猜你喜欢
  • 1970-01-01
  • 2015-12-27
  • 1970-01-01
  • 2017-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多