请问Microsoft Text Driver连接的csv文件可以用update更新数据吗?

gtclulong 2015-12-21 03:44:12
我尝试用Microsoft Text Driver去连接csv表,连接成功,使用select语句也没有问题,但是想使用update语句做数据更改时总是报错

代码如下

Private Sub testCSV()
Dim TempPath As String
Dim cnn, rs, SqlStr As String, MyArr As Variant
Set cnn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
TempPath = "D:\"
ConnStr = "Driver={Microsoft Text Driver (*.txt; *.csv)};" & "DBQ=" & TempPath & "\;Persist Security Info=False;Extended Properties='Text;FMT=Delimited(,);HDR=YES;IMEX=1'"
cnn.Open ConnStr
If cnn.State = 1 Then
SqlStr = "update [TestSql.csv] set [TestQty]='15555'"
' SqlStr = "select * from TestSql.csv"
cnn.Execute SqlStr
' End If
End If
End Sub

是否这种连接方式不支持数据更新?有谁成功更新过吗?
大家更改csv数据表,除了字符串拼接还有其他速度快点的方法吗?我的csv数据表是大约2万行55个字段的数据,做字符串拼接有点头疼啊,担心处理速度跟不上(大约5秒内要处理完,文件本身有不规范的表头,我想读数据要先把表头移走,来回读写几次文件,很耗费时间)。。
曾想过用SQLServer的bcp工具,可是工作只是把csv文件的一列满足条件的数据乘以一个固定数值,觉得有点小题大做了
...全文
453 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2015-12-23
  • 打赏
  • 举报
回复
SQL Server 是有严格的分层隔离的,内层子查询中的A不能在外层使用。要用别名,按下面的方式:
update t
set t.IV=t.IV*1.08
FROM (select A.IV from A where A.ID>10) t
Tiger_Zhao 2015-12-23
  • 打赏
  • 举报
回复
找个 SQL-92 的文档,尽量按照“标准语法”写语句,这样通用性就很好了。
gtclulong 2015-12-23
  • 打赏
  • 举报
回复
谢谢答复 同时接触Oracle和SQL Server,语法弄乱了
Tiger_Zhao 2015-12-22
  • 打赏
  • 举报
回复
Text Driver是用来解析数据文件的,要更新把文件重写一下啊。
    Dim i As Long
Dim hFile As Integer

If cnn.State = 1 Then
rs.CursorLocation = adUseClient
rs.Open "select * from [1.csv]", cnn, adOpenDynamic, adLockBatchOptimistic
Set rs.ActiveConnection = Nothing '把rs断开连接,作为一个内存表保留'
cnn.Close '关闭连接,使得下面可以写csv文件'
Set cnn = Nothing

'在内存表中更改TestQty字段只'
While Not rs.EOF
rs!TestQty = 15555
rs.MoveNext
Wend
rs.UpdateBatch
rs.MoveFirst

'重写csv'
hFile = FreeFile()
Open TempPath & "1.csv" For Output Access Write As #hFile

'表头'
For i = 0 To rs.Fields.Count - 1
If i <> 0 Then
Print #hFile, ",";
End If
Print #hFile, rs.Fields(i).Name;
Next
Print #hFile, ""
'数据'
Print #hFile, rs.GetString(columnDelimeter:=",");

Close #hFile
End If
gtclulong 2015-12-22
  • 打赏
  • 举报
回复
看起来text driver对sql的支持还是不够啊 如果有带条件的更新,还必须打开原始文件,逐行比较之后再写入文件;如果涉及表连接就更头疼了 用它访问csv文件只有select是比较方便的。 这个程序我已经放弃text Driver了,用了MSSQL的bcp导入导出数据,因为里面的update太多了(条件是变量,变量的变化组合有几百个)。 谢谢Tiger的回答,让我注意到 Set rs.ActiveConnection = Nothing 的使用。以前没有用过。 能再问一下,MSSQL中为什么 update (select A.IV from A where A.ID>10) set A.IV=A.IV*1.08 会报错呢?这个是oracle的用法吗?我把一个两表连接的查询写到update后的括号里就会报语法错误。 我在下面的博客上看到的: http://blog.itpub.net/133735/viewspace-731988/
gtclulong 2015-12-21
  • 打赏
  • 举报
回复
在C#里执行对应代码时,返回错误 “ERROR [HY000] [Microsoft][ODBC 文本 驱动程序] 该 ISAM 不支持在链接表中更新数据。” 看起来csv数据还是不能当做数据表任意操作啊 只能读不能更改

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧