Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

[5分]从ORACLE数据库读取数据,提示“查询输入必须包含至少一个表或查询”

chinasa  发表于:2014-06-13 09:13:55  
复制

我通过以下方法与ORACLE链接,在运行SQL语句时提示:“查询输入必须包含至少一个表或查询”,请问应该如何写SQL语句?

Private Sub link_Click()
If IsNull(Me.database) Then
MsgBox "服务器名称不能为空!", vbInformation, "Error 提示"
Me.database.SetFocus
Exit Sub
ElseIf IsNull(Me.user) Then
MsgBox "用户名不能为空!", vbInformation, "Error 提示"
Me.user.SetFocus
Exit Sub
ElseIf IsNull(Me.password) Then
MsgBox "密码不能空!", vbInformation, "Error 提示"
Me.password.SetFocus
Exit Sub
End If
Call oracle(IIf(IsNull(Me.ipaddress), "1", Me.ipaddress), Me.database, Me.user, Me.password)

strsql = "SELECT A表.B字段 INTO C表" _
& "FROM A表" _
& "WHERE (((A表.D字段)='文本内容'));"

DoCmd.RunSQL strsql

 

DoCmd.RunSQL strsql

 

 

End Sub

 

 

下面是模块内容

Option Compare Database
Function oracle(strIPName As String, strDBName As String, strUserID As String, strPassword As String)  '-------------网络地址、服务器名称、用户ID、密码
'----------------------------
'检测是否在连接成功
'----------------------------
Dim ConnDB As New ADODB.Connection
Dim OraOpen As Boolean
Dim connstr As String
On Error GoTo Myerr
'MsgBox strIPName
strDBName = IIf(strIPName = "1", strDBName, strIPName & ":1522/" & strDBName) '-----------网络地址转换,ORACLE默认端口是1521

'MsgBox strDBName
connstr = "DRIVER={Microsoft ODBC for Oracle};SERVER=" & strDBName & ";UID=" & strUserID & ";PWD=" & strPassword & ";"
ConnDB.CursorLocation = adUseServer
ConnDB.Open connstr
OraOpen = True
MsgBox "恭喜你已经成功连接到数据库!", vbInformation, "Connect Successful"

 

ConnDB.Close
Set ConnDB = Nothing
Exit Function
Myerr: MsgBox "连接不成功,请检查你的用户名、密码和数据库地址是否正确!", vbInformation, "No Connect Successful"
End Function

 

 

 

Top
chinasa 发表于:2014-06-13 16:35:46
这几种方法都试过,仍然出错,出错的位置相同,提示有所不同。

chinasa 发表于:2014-06-13 16:37:03


chinasa 发表于:2014-06-13 16:38:59


chinasa 发表于:2014-06-13 16:39:49

最后一张图的错误是 rst.Open strSQL, ConnDB

倒数第二张错误是 rst.Open strSQL



cspa 发表于:2014-06-13 17:26:37

最后一张图是 rst.Open strSQL, ConnDB

这个是对的,但同时提示SQL语句中有非法字符,说明SQL语句不对,你的strSQL是怎么写的? 最好用最简单的试

----------------------------------------------------------------------

倒数第二张图是 rst.Open strSQL

这个不对,说明没有指定数据库连接或已关闭



 



chinasa 发表于:2014-06-13 17:32:11

我的语句是:

strSQL = "select * from IDN;"

 



西出阳关无故人 发表于:2014-06-14 09:39:53

看到你的sql字符串之间没有空格

strsql = "SELECT A表.B字段 INTO C表" _
& "FROM A表" _
& "WHERE (((A表.D字段)='文本内容'));"

运算结果为:SELECT A表.B字段 INTO C表FROM A表WHERE (((A表.D字段)='文本内容'));

显然有问题,至少应为

strsql = "SELECT A表.B字段 INTO C表   " _
& "FROM A表  " _
& "WHERE (((A表.D字段)='文本内容'));"



renco 发表于:2014-06-14 10:27:28

strsql = "SELECT A表.B字段 INTO C表" _
& "FROM A表" _
& "WHERE (((A表.D字段)='文本内容'));"

 

Form 和 Where 前面加个空格



chinasa 发表于:2014-06-14 11:04:07

上面两位老师好,关于SQL空格的问题,开始时确实有这个错误,后来已经更改了,但问题仍然没有解决。最后改成 strSQL = "select * from IDN;" 但还是错误。



cspa 发表于:2014-06-14 17:00:22

把rst.Open strSQL, ConnDB, adOpenKeyset, adLockOptimistic, adCmdTable

改为rst.Open strSQL, ConnDB,,, adCmdText

试试



丘山 发表于:2014-06-15 12:21:03

connstr = "provider=msdaora;data source=" & strDBName & ";user id=" & strUserID & ";password=" & strPassword & ";"

把数据库连接字符串改成这个试试



丘山 发表于:2014-06-15 12:28:01

connstr = "provider=msdaora;data source=" & strDBName & ";user id=" & strUserID & ";password=" & strPassword & ";

please modify your connstr



丘山 发表于:2014-06-15 12:37:39
ConnDB.CursorLocation = adUseServer 修改成 ConnDB.CursorLocation = adUseClient 试试

 



chinasa 发表于:2014-06-15 12:52:08
感谢各位老师的指点,在家里连不上公司数据库,明天上班了我试下。

chinasa 发表于:2014-06-16 09:39:13

在各位老师的帮助下,总算弄通了,其实最关键是的SQL语句最后不能加“;”号。现在我想从ORACLE中把数据写到本地ACCESS中,但INTO语句在ORACLE中好像比较特殊,谁能指点下?

 

Dim ConnDB As New ADODB.Connection
Dim OraOpen As Boolean
Dim connstr As String
Dim rst As ADODB.Recordset
Dim strSQL As String


'On Error GoTo Myerr
'MsgBox strIPName
strDBName = "AAA"
strUserID = "BBB"
strPassword = "CCC"
connstr = "DRIVER={Microsoft ODBC for Oracle};SERVER=" & strDBName & ";UID=" & strUserID & ";PWD=" & strPassword & ";"


ConnDB.CursorLocation = adUseServer
ConnDB.Open connstr
OraOpen = True
MsgBox "恭喜你已经成功连接到数据库!", vbInformation, "Connect Successful"

'打开表,并用ADO处理数据
Set rst = New ADODB.Recordset
strSQL = "SELECT TBLA.ABC,TBLA.DEF   INTO NEWTBL " _
& "FROM TBLA " _
& "WHERE (((TBLA.XXX)='文本条件'))"

'其中WHERE条件我是想 (BETWEEN XXDATE AND XXDATE1) AND XX="YY"

rst.Open strSQL, ConnDB, adOpenKeyset, adLockPessimistic
rst.MoveFirst



chinasa 发表于:2014-06-16 09:56:58
看了很多论坛,说是要用 insert into

总记录:36篇  页次:2/2 9 7 1 2 :