【发布时间】:2017-11-26 18:40:43
【问题描述】:
我开始说我是数据库、sql 和类似的新手,所以代码语法可能是错误的......
我必须从 firebird 数据库的三个表中提取一些数据。
我试过这个查询:
SELECT
PRODUZIONE_T.NUMEROCOMMESSA,
ANGCLIENTIFORNITORI.RAGIONESOCIALE1,
PRODUZIONE_T.DATACONSEGNA,
ANGUTENTI.NOMINATIVO
FROM
(SELECT
PRODUZIONE_T.NUMEROCOMMESSA,
ANGCLIENTIFORNITORI.RAGIONESOCIALE1,
PRODUZIONE_T.DATACONSEGNA
FROM PRODUZIONE_T
LEFT OUTER JOIN
ORDINI_T ON
PRODUZIONE_T.CODORDINE=ORDINI_T.CODORDINE
INNER JOIN ANGCLIENTIFORNITORI ON
ANGCLIENTIFORNITORI.CODCLIFOR=ORDINI_T.CODCLIFOR)
INNER JOIN
(SELECT ANGUTENTI.NOMINATIVO
FROM ANGUTENTI)
ON ANGUTENTI.IDUTENTE = PRODUZIONE_T.RESPONSABILEUC
ORDER BY PRODUZIONE_T.NUMEROCOMMESSA;
但我收到此错误:
错误:GDS 异常。 335544569. 动态 SQL 错误 SQL 错误代码 = -206 列未知 ANGUTENTI.IDUTENTE 第 20 行第 15 列错误代码:335544569
我确定字段 ANGUTENTI.IDUTENTE 存在!
为什么?有什么建议吗?
数据库不是我的创造。 我必须提取一些数据并将其导入 excel:这是表格:
在PRODUZIONE_T 表中我们有:
- CODPRODUZIONE(整数 PK)
- CODORDINE(整数 FK 到 ORDINI_T.CODORDINE)
- NUMEROCOMMESSA (varchar)
- DATACONSEGNA(时间戳)
- RESPONSABILEUC(整数)
表中ORDINI_T
- CODORDINE(整数 PK)
- CODCLIFOR(varchar(25) FK 到 angclientifornitori.codclifor)
表中ANGCLIENTIFORNITORI
- CODCLIFOR (varchar(25) PK)
- RAGIONESOCIALE1 (varchar)
表中ANGUTENTI
- IDUTENTE(整数 PK)
- 名词名词 (varchar(40)
对于每条记录,我必须在 Excel 中使用PRODUZIONE_T.NUMEROCOMMESSA, ANGCLIENTIFORNITORI.RAGIONESOCIALE1, PRODUZIONE_T.DATACONSEGNA, ANGUTENTI.NOMINATIVO 写一行。
numerocommessa 是序号,ragionesociale1 是客户名称,Dataconsegna 是日期,Nominativo 是商业代理名称。
这是 VBA 代码
Public Sub UpCommesse()
Application.EnableEvents = False
Set Conn = New ADODB.Connection
Driver = "Firebird/InterBase(r) driver"
Host = "Zamberlangest"
Utente = "SYSDBA"
Password = "masterkey"
Database = "Commesse"
'Stringa = "DRIVER=Firebird/InterBase(r) driver;=zamberlangest;UID=SYSDBA;PWD=masterkey;DBNAME=c:\program files\go2\database\go2.gdb"
Stringa = "DRIVER=Firebird/InterBase(r) driver;User=SYSDBA;Password=masterkey;Database=\\zamberlangest/c:\program files\go2\database\go2.gdb;DataSource=zamberlangest;Port=3050;Dialect=3;Charset=NONE;Role=;Connection lifetime=15;Pooling=true;MinPoolSize=0;MaxPoolSize=50;Packet Size=8192;ServerType=0;"
Conn.ConnectionString = Stringa
'On Error GoTo Connect_Error
If Not (Conn.State = adStateOpen) Then
Conn.Properties("PROMPT") = adPromptNever
Conn.Open
Connesso = True
End If
Application.EnableEvents = True
Call Commesse
Exit Sub
Connect_Error:
MsgBox "Connessione con il server MySQL " & Host & " fallita", vbCritical, "Attenzione"
Connesso = False
End
On Error GoTo 0
End Sub
Sub Commesse()
Set FoglioCommessa = ThisWorkbook.Sheets("commesse")
FoglioCommessa.Cells.Delete
Application.EnableEvents = True
Set RS1 = New ADODB.Recordset
'Query = "SELECT PRODUZIONE_T.NUMEROCOMMESSA, ANGCLIENTIFORNITORI.RAGIONESOCIALE1, PRODUZIONE_T.DATACONSEGNA FROM PRODUZIONE_T LEFT OUTER JOIN ORDINI_T ON PRODUZIONE_T.CODORDINE=ORDINI_T.CODORDINE INNER JOIN ANGCLIENTIFORNITORI ON ANGCLIENTIFORNITORI.CODCLIFOR=ORDINI_T.CODCLIFOR;"
Query = "SELECT PRODUZIONE_T.NUMEROCOMMESSA, ANGCLIENTIFORNITORI.RAGIONESOCIALE1, PRODUZIONE_T.DATACONSEGNA, ANGUTENTI.NOMINATIVO FROM (SELECT PRODUZIONE_T.NUMEROCOMMESSA, ANGCLIENTIFORNITORI.RAGIONESOCIALE1, PRODUZIONE_T.DATACONSEGNA FROM PRODUZIONE_T LEFT OUTER JOIN ORDINI_T ON PRODUZIONE_T.CODORDINE=ORDINI_T.CODORDINE INNER JOIN ANGCLIENTIFORNITORI ON ANGCLIENTIFORNITORI.CODCLIFOR=ORDINI_T.CODCLIFOR) INNER JOIN (SELECT ANGUTENTI.NOMINATIVO FROM ANGUTENTI) ON PRODUZIONE_T.RESPONSABILEUC = ANGUTENTI.IDUTENTE ORDER BY PRODUZIONE_T.NUMEROCOMMESSA;"
With RS1
.ActiveConnection = Conn
.Source = Query
.Open
FoglioCommessa.Range("a1").CopyFromRecordset RS1
.Close
End With
Conn.Close
End Sub
【问题讨论】:
-
ANGUTENTI 表你有
used only in your INNER SELECT查询。因此它在这一行不可见- ON ANGUTENTI.IDUTENTE = PRODUZIONE_T.RESPONSABILEUC -
您可以添加表结构和一些您试图通过此查询获取的内容的描述。您可能会得到更好的解决方案。
-
感谢我更新了帖子