【问题标题】:VBA, ADO.Connection and PostgreSQL how to pass query parameter into pg_typeof()VBA、ADO.Connection 和 PostgreSQL 如何将查询参数传递给 pg_typeof()
【发布时间】:2014-12-22 22:00:24
【问题描述】:

我一直在尝试通过在以下代码部分中将列名作为参数传递来获取列的数据类型。但是我的查询返回“未知”值,而不是定义的数据类型,如字符变化、整数、文本等。如果我将参数值直接提供给 SQL 查询而不是问号 (?),它会返回我想要查看的内容。 (“从 t_haendler 限制 1 中选择 pg_typeof(haendler_id);”)。我该如何处理这个问题?

Sub PGTYPEOF()

Dim CN As New ADODB.Connection
Dim RS As New ADODB.Recordset
Dim CM As New ADODB.Command
Dim PM1 As New ADODB.Parameter

Dim strConn As String
Dim i, ItemVal As Variant


strConn = "Driver={PostgreSQL ODBC Driver(Unicode)};DSN=postgres;Server=localhost;
Port=5432;UID=postgres;PWD=###; Database=###;READONLY=0;PROTOCOL=6.4;FAKEOIDINDEX=0;
SHOWOIDCOLUMN=0; ROWVERSIONING=0;SHOWSYSTEMTABLES=1"

CN.Open strConn

i = "haendler_id"

            With CM
            .ActiveConnection = CN
            .CommandText = "SELECT pg_typeof(?) from t_haendler limit 1;"
            .CommandType = adCmdText
            Set PM1 = .CreateParameter(, adVarChar, adParamInput, 30)

            PM1.Value = i
            .Parameters.Append PM1
            Set RS = .Execute
            End With

            Do While Not RS.EOF

            'Debug.Print RS.Fields(0).Value
            ItemVal = RS.Fields(0).Value
            RS.MoveNext

            Loop


End Sub

【问题讨论】:

    标签: vba postgresql parameters adodb


    【解决方案1】:

    我不知道为什么,但是 pg_typeof() 函数不起作用。我解决了我的问题,将我的 sql 查询更改为“从 information_schema.columns where table_name = ? and column_name = ?; 中选择 data_type”

             With CM
    
                .ActiveConnection = CN
                .CommandText = "select  data_type from information_schema.columns where 
                 table_name = ? and column_name = ?;"
    
                .CommandType = adCmdText
                Set PM1 = .CreateParameter(, adVarChar, adParamInput, 30)
                PM1.Value = i
                .Parameters.Append PM1
    
                Set PM2 = .CreateParameter(, adVarChar, adParamInput, 30)
                PM2.Value = j
                .Parameters.Append PM2
                Set RS = .Execute
    
           End With
    

    【讨论】:

      猜你喜欢
      • 2012-05-08
      • 1970-01-01
      • 1970-01-01
      • 2017-03-08
      • 2017-05-28
      • 2019-02-05
      • 2019-06-22
      • 2016-06-11
      • 2018-09-30
      相关资源
      最近更新 更多