繁体   English   中英

VBA,ADO.Connection和PostgreSQL如何将查询参数传递到pg_typeof()

[英]VBA, ADO.Connection and PostgreSQL how to pass query parameter into pg_typeof()

我一直在尝试通过在以下代码部分中将列名作为参数传递来获取列的数据类型。 但是我的查询返回的是“未知”值,而不是定义的数据类型(例如字符变化,整数,文本等)。如果我直接将参数值提供给SQL查询而不是问号(?),它将返回我想查看的内容。 (“从t_haendler限制1中选择SELECT 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

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

         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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM