MS Excel Visual Basic基本SQL查询(多个参数和SQLstring格式)

所以,作为标题说,我想要做的是在MS Excel可视化基本我试图写在Visual Basic中的所有连接到数据库的SQL查询,并有多个单元格作为参数。 现在我正在专注于让查询返回未经过滤的结果。 我find了一个非常基本的例子

真棒查询,同胞stackoverflow成员

我只是直接复制了他有问题的代码,并用我的数据库和一个非常简单的查询进行了testing。 这一切工作正常和花花公子。

我遇到的问题是我有一个更复杂的SQL查询,我需要使用,我不太确定格式应该如何在VB中。

我需要运行的SQL查询如下所示。 我使用的数据库也不是很友好。 当我尝试把整个查询放入SQLstring时,它给了我一个只是说SQL语法错误的错误。 而当我去debugging它显示在.Refresh线上的错误。 我意识到这个查询是非常大的,所以我把它修剪下来,并在VB中用双引号标记在每个句子周围,并与&_结合在一起。 (见底部)

任何人有任何build议?

如果任何人想要完整的代码,让我知道,但它是非常类似于我上面发布的链接,只是ODBC连接信息是不同的。

先谢谢了。

SELECT DISTINCT S.SAMPLENAME, S.SAMPLE_DESCRIPTION, B.BATCH_NAME, PR.PROC_NAME, S.SAMPLESTATE, S.SAMPLE_QTY, (SELECT MMNT_NAME FROM apexalpha.CI_AAS_MEASUREMENTUNIT WHERE (MEASUREMENTUNITID = S.SAMPLE_QTY_MEASUREMENTUNITID)) AS SAMP_MMNT_NAME, ACQP_CTABULAR.ASTIME, S.SAMPLE_DATE, ACQP_CTABULAR.EREAL, ACQP_CTABULAR.ELIVE, TRACER.CERT_NAME AS TRACER_CERT_NAME, S.TRACER_QTYFROM apexalpha.CI_AAD_BATCH AS B INNER JOIN apexalpha.CI_AAD_SAMPLE AS S ON S.BATCHID = B.BATCHID LEFT OUTER JOIN apexalpha.CI_AAS_PROCEDURE AS PR ON B.PROCEDUREID = PR.PROCEDUREID AND B.REVISION = PR.REVISION LEFT OUTER JOIN apexalpha.CI_AAD_SAMPLE_ANALYSIS AS A ON S.APPROVED_ANALYSISID = A.SAMPLE_ANALYSISID LEFT OUTER JOIN apexalpha.CI_AAR_CAM_ACQP1_RECORD AS ACQP1 ON A.SAMPLE_ANALYSISID = ACQP1.SAMPLE_ANALYSISID LEFT OUTER JOIN apexalpha.CI_AAR_CAM_PROC1_COMMON AS PROC1 ON A.SAMPLE_ANALYSISID = PROC1.SAMPLE_ANALYSISID LEFT OUTER JOIN apexalpha.CI_AAR_CAM_GEOM_RECORD AS GEOM ON A.SAMPLE_ANALYSISID = GEOM.SAMPLE_ANALYSISID LEFT OUTER JOIN apexalpha.CI_AAR_CAM_ACQP_CTABULAR AS ACQP_CTABULAR ON A.SAMPLE_ANALYSISID = ACQP_CTABULAR.SAMPLE_ANALYSISID LEFT OUTER JOIN apexalpha.CI_AAD_SAMPLE_RUN AS RUN ON RUN.CURRENT_ANALYSISID = S.APPROVED_ANALYSISID LEFT OUTER JOIN apexalpha.CI_AAS_CHAMBER AS C ON RUN.CHAMBERID = C.CHAMBERID LEFT OUTER JOIN apexalpha.CI_AAR_CAM_ANALCNTL1_COMMON AS ANCNTL ON A.SAMPLE_ANALYSISID = ANCNTL.SAMPLE_ANALYSISID LEFT OUTER JOIN apexalpha.CI_AAR_CAM_ANALCNTL2_COMMON AS ANCNTL2 ON A.SAMPLE_ANALYSISID = ANCNTL2.SAMPLE_ANALYSISID LEFT OUTER JOIN apexalpha.CI_AAR_CAM_NUCL_RTABULAR AS NUCL_TAB ON A.SAMPLE_ANALYSISID = NUCL_TAB.SAMPLE_ANALYSISID LEFT OUTER JOIN apexalpha.CI_AAR_CAM_NUCL_COMMON AS NUCL ON A.SAMPLE_ANALYSISID = NUCL.SAMPLE_ANALYSISID LEFT OUTER JOIN apexalpha.CI_AAR_CAM_NUCL_RECORD AS NUCL_REC ON A.SAMPLE_ANALYSISID = NUCL_REC.SAMPLE_ANALYSISID AND NUCL_REC.CAMRECORD = NUCL_TAB.CAMRECORD LEFT OUTER JOIN apexalpha.CI_AAR_CAM_PEAK_RECORD AS PEAK ON A.SAMPLE_ANALYSISID = PEAK.SAMPLE_ANALYSISID AND NUCL_TAB.NLPEAK = PEAK.CAMRECORD LEFT OUTER JOIN apexalpha.CI_AAR_CAM_PEAK_COMMON AS PEAK_COMMON ON A.SAMPLE_ANALYSISID = PEAK_COMMON.SAMPLE_ANALYSISID LEFT OUTER JOIN apexalpha.CI_AAS_ELEMENT_REV AS EL_REV ON PR.ELEMENTID = EL_REV.ELEMENTID AND B.ELEMENT_REVID = EL_REV.ELEMENT_REVID LEFT OUTER JOIN apexalpha.CI_AAS_CERTIFICATE AS TRACER ON EL_REV.TRACER_CERTIFICATEID = TRACER.CERTIFICATEID LEFT OUTER JOIN apexalpha.CI_AAS_CERTIFICATE AS CONTROL ON EL_REV.CONTROL_CERTIFICATEID = CONTROL.CERTIFICATEID LEFT OUTER JOIN dbo.CI_SHL_USER AS APPUSR1 ON S.APPROVAL1_USERID = APPUSR1.USERID LEFT OUTER JOIN dbo.CI_SHL_USER AS APPUSR2 ON S.APPROVAL2_USERID = APPUSR2.USERID LEFT OUTER JOIN apexalpha.CI_AAR_CAM_SPECIAL_RECORD AS SPEC_REC2 ON A.SAMPLE_ANALYSISID = SPEC_REC2.SAMPLE_ANALYSISID AND SPEC_REC2.CAMRECORD = 2 LEFT OUTER JOIN apexalpha.CI_AAR_CAM_SPECIAL_RECORD AS SPEC_REC3 ON A.SAMPLE_ANALYSISID = SPEC_REC3.SAMPLE_ANALYSISID AND SPEC_REC3.CAMRECORD = 3 LEFT OUTER JOIN apexalpha.CI_AAR_CAM_SAMP_COMMON AS SAMP_COM ON A.SAMPLE_ANALYSISID=SAMP_COM.SAMPLE_ANALYSISID WHERE (S.SAMPLE_DESCRIPTION = '2014-246') 

这是VB中的SQL代码块。

 '--build SQL statement sSQL = "SELECT DISTINCT S.SAMPLENAME, S.SAMPLE_DESCRIPTION, B.BATCH_NAME, PR.PROC_NAME, S.SAMPLESTATE, S.SAMPLE_QTY, (SELECT MMNT_NAME FROM apexalpha.CI_AAS_MEASUREMENTUNIT WHERE (MEASUREMENTUNITID = S.SAMPLE_QTY_MEASUREMENTUNITID)) AS SAMP_MMNT_NAME, ACQP_CTABULAR.ASTIME, S.SAMPLE_DATE, ACQP_CTABULAR.EREAL, ACQP_CTABULAR.ELIVE, TRACER.CERT_NAME AS TRACER_CERT_NAME, S.TRACER_QTY " & _ "FROM apexalpha.CI_AAD_BATCH AS B INNER JOIN apexalpha.CI_AAD_SAMPLE AS S ON S.BATCHID = B.BATCHID LEFT OUTER JOIN apexalpha.CI_AAS_PROCEDURE AS PR ON B.PROCEDUREID = PR.PROCEDUREID AND B.REVISION = PR.REVISION " & _ "LEFT OUTER JOIN apexalpha.CI_AAD_SAMPLE_ANALYSIS AS A ON S.APPROVED_ANALYSISID = A.SAMPLE_ANALYSISID LEFT OUTER JOIN apexalpha.CI_AAR_CAM_ACQP1_RECORD AS ACQP1 ON A.SAMPLE_ANALYSISID = ACQP1.SAMPLE_ANALYSISID LEFT OUTER JOIN apexalpha.CI_AAR_CAM_PROC1_COMMON AS PROC1 ON A.SAMPLE_ANALYSISID = PROC1.SAMPLE_ANALYSISID LEFT OUTER JOIN apexalpha.CI_AAR_CAM_GEOM_RECORD AS GEOM ON A.SAMPLE_ANALYSISID = GEOM.SAMPLE_ANALYSISID " & _ "LEFT OUTER JOIN apexalpha.CI_AAR_CAM_ACQP_CTABULAR AS ACQP_CTABULAR ON A.SAMPLE_ANALYSISID = ACQP_CTABULAR.SAMPLE_ANALYSISID LEFT OUTER JOIN apexalpha.CI_AAD_SAMPLE_RUN AS RUN ON RUN.CURRENT_ANALYSISID = S.APPROVED_ANALYSISID LEFT OUTER JOIN apexalpha.CI_AAS_CHAMBER AS C ON RUN.CHAMBERID = C.CHAMBERID LEFT OUTER JOIN apexalpha.CI_AAR_CAM_ANALCNTL1_COMMON AS ANCNTL ON A.SAMPLE_ANALYSISID = ANCNTL.SAMPLE_ANALYSISID " & _ "LEFT OUTER JOIN apexalpha.CI_AAR_CAM_ANALCNTL2_COMMON AS ANCNTL2 ON A.SAMPLE_ANALYSISID = ANCNTL2.SAMPLE_ANALYSISID LEFT OUTER JOIN apexalpha.CI_AAR_CAM_NUCL_RTABULAR AS NUCL_TAB ON A.SAMPLE_ANALYSISID = NUCL_TAB.SAMPLE_ANALYSISID LEFT OUTER JOIN apexalpha.CI_AAR_CAM_NUCL_COMMON AS NUCL ON A.SAMPLE_ANALYSISID = NUCL.SAMPLE_ANALYSISID " & _ "LEFT OUTER JOIN apexalpha.CI_AAR_CAM_NUCL_RECORD AS NUCL_REC ON A.SAMPLE_ANALYSISID = NUCL_REC.SAMPLE_ANALYSISID AND NUCL_REC.CAMRECORD = NUCL_TAB.CAMRECORD LEFT OUTER JOIN apexalpha.CI_AAR_CAM_PEAK_RECORD AS PEAK ON A.SAMPLE_ANALYSISID = PEAK.SAMPLE_ANALYSISID AND NUCL_TAB.NLPEAK = PEAK.CAMRECORD LEFT OUTER JOIN apexalpha.CI_AAR_CAM_PEAK_COMMON AS PEAK_COMMON ON A.SAMPLE_ANALYSISID = PEAK_COMMON.SAMPLE_ANALYSISID LEFT OUTER JOIN apexalpha.CI_AAS_ELEMENT_REV AS EL_REV ON PR.ELEMENTID = EL_REV.ELEMENTID AND B.ELEMENT_REVID = EL_REV.ELEMENT_REVID " & _ "LEFT OUTER JOIN apexalpha.CI_AAS_CERTIFICATE AS TRACER ON EL_REV.TRACER_CERTIFICATEID = TRACER.CERTIFICATEID LEFT OUTER JOIN apexalpha.CI_AAS_CERTIFICATE AS CONTROL ON EL_REV.CONTROL_CERTIFICATEID = CONTROL.CERTIFICATEID LEFT OUTER JOIN dbo.CI_SHL_USER AS APPUSR1 ON S.APPROVAL1_USERID = APPUSR1.USERID LEFT OUTER JOIN dbo.CI_SHL_USER AS APPUSR2 ON S.APPROVAL2_USERID = APPUSR2.USERID LEFT OUTER JOIN apexalpha.CI_AAR_CAM_SPECIAL_RECORD AS SPEC_REC2 ON A.SAMPLE_ANALYSISID = SPEC_REC2.SAMPLE_ANALYSISID AND SPEC_REC2.CAMRECORD = 2 " & _ "LEFT OUTER JOIN apexalpha.CI_AAR_CAM_SPECIAL_RECORD AS SPEC_REC3 ON A.SAMPLE_ANALYSISID = SPEC_REC3.SAMPLE_ANALYSISID AND SPEC_REC3.CAMRECORD = 3 LEFT OUTER JOIN apexalpha.CI_AAR_CAM_SAMP_COMMON AS SAMP_COM ON A.SAMPLE_ANALYSISID = SAMP_COM.SAMPLE_ANALYSISID " & _ " WHERE SAMPLE_DESCRIPTION = ?;" 

我记得有一个线的限制,你可以连接&_。 这是约28行。 解决scheme是创build两个stringvariables,分配值保持行的限制,并产生查询string为query = str1 & str2 。 GL!