Office中国论坛/Access中国论坛

标题: 无效的INSTER INTO语句 [打印本页]

作者: dgx1995    时间: 2003-11-3 17:26
标题: 无效的INSTER INTO语句
Private Sub 下载基础资料_Click()

   
    Dim wrkODBC As Workspace
    Dim a As DAO.Connection
    Set wrkODBC = CreateWorkspace("NewODBCWorkspace", _
        "admin", "", dbUseODBC)
     
    Set a = wrkODBC.OpenConnection("lx", , _
True, "ODBC;DATABASE=fuzhuang;UID=saWD=;")
        
    Dim rstTemp As DAO.Recordset
    Set rstTemp = a.OpenRecordset("SELECT * FROM 员工", dbOpenDynaset)
        
        
   Do Until rstTemp.EOF = True
   
   BB = rstTemp.Fields(0)
   DoCmd.RunSQL "INSERT INTO 员工 ( 姓名 ) VALUES '" & BB & "'"
   rstTemp.MoveNext
   
   Loop
    a.Close
    wrkODBC.Close

'为什么总是提示我INSERT INTO 语法错误。第一个员工为SQL SERVER上的表,第二
'个为本地表。
End Sub

作者: ADAM    时间: 2003-11-3 17:29
加個括號試試:
DoCmd.RunSQL "INSERT INTO 员工 ( 姓名 ) valueS ('" & BB & "')"

作者: dgx1995    时间: 2003-11-3 17:39
谢了。
那我在请问,如何判断rstTemp,一共有几个字段呀,因为我不想每个字段都用
“BB = rstTemp.Fields(0)“这个语句来实现。

作者: ADAM    时间: 2003-11-3 17:42
是不是這個..呵呵...
rstTemp.Fields.count
作者: dgx1995    时间: 2003-11-3 17:49
谢谢,万分感谢!
作者: dgx1995    时间: 2003-11-3 18:48
又有问题了。
请问 DoCmd.RunSQL "INSERT INTO 员工 ( 姓名 ) valueS '" & BB & "'"
这句中的姓名,如何能够变为自动的
即如何判断本地表的字段名称
作者: ADAM    时间: 2003-11-3 19:25
試試:
姓名改成:
Currentdb.tabledefs("姓名").fields(i).name
當然要用&連接喔...
作者: dgx1995    时间: 2003-11-3 20:44
sorry,我就是不会怎么用連接
作者: dgx1995    时间: 2003-11-3 20:46
对ACCESS,我是看得懂,不会写。
作者: ADAM    时间: 2003-11-3 22:54
DoCmd.RunSQL "INSERT INTO 员工 ( " &Currentdb.tabledefs("姓名").fields(i).name
& ") valueS '" & BB & "'"

作者: dgx1995    时间: 2003-11-4 04:40
在次感谢!!
又有一问题。
Dim wrkODBC As Workspace
    Dim yc As DAO.Connection
    Set wrkODBC = CreateWorkspace("NewODBCWorkspace", _
        "admin", "", dbUseODBC)
    Set yc = wrkODBC.OpenConnection("lx", , _
True, "ODBC;DATABASE=fuzhuang;UID=saWD=;")
    Dim rstTemp As DAO.Recordset
    '------下载员工资料
    Set rstTemp = yc.OpenRecordset("SELECT * FROM 员工", dbOpenDynaset)
    DoCmd.SetWarnings False
    DoCmd.RunSQL "delete * from 员工"
    i = 0
    c = rstTemp.Fields.Count
    Do While i < c
        
    Do Until rstTemp.EOF = True
   
    BB = rstTemp.Fields(i)
        DoCmd.RunSQL "INSERT INTO 员工 ( " & CurrentDb.TableDefs("员工").Fields(i).Name & ") valueS ('" & BB & "')"
   rstTemp.MoveNext
    Loop
     i = i + 1
     rstTemp.MoveFirst
    Loop
    yc.Close
    wrkODBC.Close
    DoCmd.SetWarnings True


执行后结果为
1
    张小燕
              女
                  库房主管

,请问这个怎么办?
作者: ADAM    时间: 2003-11-4 15:20
請檢查你的循環

試試這樣吧..

Do Until rstTemp.EOF

      for i=0 to c-1
        DoCmd.RunSQL "INSERT INTO 员工 ( " & CurrentDb.TableDefs("员工").Fields       (i).Name & ") valueS ('" & rstTemp.Fields(i) & "')"

   next
   rstTemp.Movenext
    Loop

作者: dgx1995    时间: 2003-11-4 18:37
我試了,结果还是这样,我想是因为在插入的时候,字段1占据了第一条记录,字段2在插入的时候,便从记录2开始插入了。才会出现这样的结果。
应该是sql语句的想法不对,现在的语句还可在加WHERE否

1
    张小燕
              女
                  库房主管
作者: ADAM    时间: 2003-11-4 19:55
哦,糊涂了:

CurrentDb.TableDefs("员工").Fields       (i).Name & ") valueS ('" & rstTemp.Fields(i) & "')"

改成:
DIM dbs as database
dim rst as recordset
set dbs=currentdb
set rst=dbs.openrecordset("員工")
...
rst.addnew
rst.fields(i)=rsttemp.fields(i)
...

另外
你的目地是把網上的員工資料讀到本地來,可以這樣的...
INSERT INTO 員工
SELECT 員工.*
FROM 員工 in '網上路徑'[Provider=Microsoft.Jet.OLEDB.4.0] ;


作者: dgx1995    时间: 2003-11-4 22:11
'網上路徑'??
作者: ADAM    时间: 2003-11-4 22:23
就是你要讀取的資料路徑:

\\SERVER\123\TEST.MDB
作者: dgx1995    时间: 2003-11-4 22:29
远程的数据库是SQL SERVER 2000
作者: ADAM    时间: 2003-11-4 22:38
哦,難怪
作者: dgx1995    时间: 2003-11-4 23:12
都怪我太笨,不明白什么意思。
INSERT INTO 員工
SELECT 員工.*
FROM 員工 in '網上路徑'[Provider=Microsoft.Jet.OLEDB.4.0] ;
这句,中的网上路径,能不能通过ODBC来实现。
谢谢!
作者: ADAM    时间: 2003-11-4 23:25
不好意思,我沒用過SQL,ADP
所以,接不下去了....
但是,你如果不是一條一條判斷的讀入數據
應該用SQL語句一次性填入
是最好的...
上面那句呢,要改的不是網上路徑,而是后面的[...]
試試改成
Provider=sqloledb
這個只能你自已試試了,
祝你成功...
呵呵...
作者: dgx1995    时间: 2003-11-4 23:49
thank you
我的问题比较多,
應該用SQL語句一次性填入 ?
不太明白
万分感谢!
作者: ADAM    时间: 2003-11-4 23:56
就是不要用循環來實現,
用INSERT INTO 語句來完成...
作者: dgx1995    时间: 2003-11-6 06:43
改成:
DIM dbs as database
dim rst as recordset
set dbs=currentdb
set rst=dbs.openrecordset("員工")
...
rst.addnew
rst.fields(i)=rsttemp.fields(i)
...

后,为什么执行结果为空,就是本地员工表没有记录。
请在给予帮助。
谢谢
作者: ADAM    时间: 2003-11-6 15:24
你有沒加一句
RST.UPDATE

...
rst.addnew
FOR 語句
rst.fields(i)=rsttemp.fields(i)
RST.UPDATE
NEXT
Rsttemp.movenext
....
作者: dgx1995    时间: 2003-11-7 00:46
我要是不用循环,怎么能把RSTTEMP中的数据全部插入到RST中呢?




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3