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

标签 vba postgresql parameters adodb

我一直在尝试通过在以下代码部分中将列名作为参数传递来获取列的数据类型。但是我的查询返回“未知”值而不是定义的数据类型,如字符变化、整数、文本等。如果我将参数值直接提供给 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

最佳答案

我不知道为什么 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

关于VBA、ADO.Connection 和 PostgreSQL 如何将查询参数传递给 pg_typeof(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27611061/

相关文章:

excel - VBA最终用户将Microsoft Office 2007升级到2010(从VBA 6到VBA7)的问题以及对文档,帮助和提示的需求。 (足够使用关键字)

postgresql - 我们应该使用哪种数据类型来存储卢比和派萨?

postgresql - (JDBI/Dropwizard) 从 PostgreSQL 检索自动递增的 id 时出现 PSQLException

sql - 在 Reporting Services 中为单个参数传递多个值

vba - 在VBA中创建列表字典

vba - 查找范围内的特定字符串并将其复制到 VBA 中的另一个字段

excel - VBA中的 'Type characters'和 'Type conversion functions'有什么区别?

sql - 如何使用 postgresql 对字符串上的自定义排序顺序的查询进行排序?

方法中的java可选参数

sql - 参数绑定(bind)和 IN 运算符