简体   繁体   English

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

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

I have been trying to get datatype of a column by passing the column name as parameter in following code part. 我一直在尝试通过在以下代码部分中将列名作为参数传递来获取列的数据类型。 But my query returns "unknown" value instead of defined datatypes like character varying, integer, text, etc. If I give paramater value directly into SQL query instead of question mark (?), it returns what I want to see. 但是我的查询返回的是“未知”值,而不是定义的数据类型(例如字符变化,整数,文本等)。如果我直接将参数值提供给SQL查询而不是问号(?),它将返回我想查看的内容。 ("SELECT pg_typeof(haendler_id) from t_haendler limit 1;"). (“从t_haendler限制1中选择SELECT pg_typeof(haendler_id);”)。 How can I handle this problem? 我该如何解决这个问题?

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

I do not know why but pg_typeof() function does not function. 我不知道为什么,但是pg_typeof()函数不起作用。 I solved my problem changing my sql query as follows "select data_type from information_schema.columns where table_name = ? and column_name = ?;" 我解决了如下更改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