SQL查询不会仅返回一个字段的完整结果

Lia*_*ett 4 sql excel vba

我在使用VBA执行SQL查询并将结果复制到Excel工作表时遇到问题.

当sub excecutes时,它只复制256的倍数的行(因此行256,512,768等是唯一填充到Excel中的行).从数据库复制任何其他字段我没有问题.此外,当我在MySQL中运行相同的查询时,它工作正常.对于SQL和VBA都相当新,我看不出为什么这个特定字段应该引起麻烦的任何原因.我唯一能想到的是它的内容是一个总是以下划线开头的字符串(我只提到它,因为它是它和其他一些字段之间的唯一区别).

有没有人想知道为什么会这样?

干杯,

利亚姆

编辑:这是有问题的代码片段.说实话,我不确定看到代码是否有所作为,因为它适用于其他情况,但再次,这就是为什么我是新手:)

        Dim con As ADODB.Connection
        Dim rst As ADODB.Recordset

        Set con = New ADODB.Connection
        Set rst = New ADODB.Recordset

        con.ConnectionString = "DRIVER={MySQL ODBC 5.1 Driver};SERVER=ipaddress;UID=userID;PWD=password;DATABASE=jiradb;OPTION=16427;"
        con.Open

        sql = "SELECT TEMPO_DATA FROM gssd_worklog WHERE WORK_DATE BETWEEN '2012-01-01' AND '2012-03-31'"

        'Open Recordset'
        rst.Open sql, con

        'Copy Data to Excel'
        Set ws = ActiveSheet

        ws.Range("A2").CopyFromRecordset rst
Run Code Online (Sandbox Code Playgroud)

小智 7

昨天我遇到了一个非常类似的问题并且在研究时发现了这个线程,所以想要添加我的"解决方案",以防它帮助其他人.

为了优化问题描述,我发现它应用于我的数据集中的一个特定字段,有趣的是,如果我重新排序查询,则应用于每个后续字段.添加尾随或删除早期字段对我的问题列没有任何影响.

检查类型显示它与其他一些确实有效的字段的类型相同,因此也没有任何线索.

但是,由于它是一个特定的字段(在本例中是一个文本字段),我决定尝试将我的SQL查询更改为CAST问题字段,更改:

SELECT Col1, Col2, Col3 FROM TableName
Run Code Online (Sandbox Code Playgroud)

...至...

SELECT Col1, Col2, CAST(Col3 AS VARCHAR(8)) AS Col3 FROM TableName
Run Code Online (Sandbox Code Playgroud)

......突然出现所有数据(包括任何尾随列).


Lia*_*ett 3

我想我已经找到了解决方案,感谢 Lamak 的帮助:

rst.Open sql, con

Dim iRows As Integer
For iCols = 0 To rst.Fields.Count - 1
    ws.Cells(1, iCols + 1).Select
    With Selection
        .Value = rst.Fields(iCols).Name
        .Font.Bold = True
        .EntireColumn.AutoFit
    End With
Next iCols

iRows = 2

While Not rst.EOF
    For iCols = 0 To rst.Fields.Count - 1
        ws.Cells(iRows, iCols + 1).Value = rst.Fields(iCols).Value
    Next iCols
    rst.MoveNext
    iRows = iRows + 1
Wend
Run Code Online (Sandbox Code Playgroud)

问题似乎是试图一次将所有字段复制出记录集,逐字段、逐行复制记录似乎可以解决问题。