2014-12-22 3 views
1

다음 코드 부분에서 매개 변수로 열 이름을 전달하여 열의 데이터 형식을 가져 오려고했습니다. 그러나 내 쿼리는 character varying, integer, text 등과 같이 정의 된 데이터 유형 대신 "unknown"값을 반환합니다. 물음표 (?) 대신 SQL 쿼리에 매개 변수 값을 직접 입력하면 원하는 값을 반환합니다. ("선택 pg_typeof (haendler_id) t_haendler 제한 1;"). 이 문제를 어떻게 해결할 수 있습니까?VBA, ADO.Connection 및 PostgreSQL pg_typeof()에 쿼리 매개 변수를 전달하는 방법

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 

답변

0

왜 pg_typeof() 함수가 작동하지 않는 지 모르겠다. 나는 내 SQL 쿼리를 변경 내 문제를 해결 "information_schema.columns에서 select data_type where table_name =? and 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