0

VBA でレコード セットを定義し、データベースからデータを読み取ると、レコードセットはそのデータ型をテーブルの列データ型に変換します。

Dim rs as adobb.RecordSet 
Set rs = CmdSqlData.Execute() ' After this rs fields will be stored based on table's datatype

レコードセット自体を String と Perform に設定する方法はありますか?

Set rs = CmdSqlData.Execute()

例: データベース テーブル定義にタイムスタンプ値 (整数値を持つ) がある場合、Recordset はそのフィールドのデータ型をタイムスタンプに設定します。

問題は、データベースで、

時刻の値は 12345 (日付と時刻ではない) ですが、レコード セットがそれを読み取ると、次のようになります。例: 23-06-2012 10:15:23

値を12345にしたかった

4

3 に答える 3

2

SELECTステートメントは、Teradata TIMESTAMP to FLOAT(DATEはINTEGER)に対して明示的なCASTを実行する必要があります。

SELECT CURRENT_TIMESTAMP()
     , CAST(CURRENT_TIMESTAMP() AS FLOAT) AS NumericTimeStamp
;

RecordsetはNumericTimeStampをTIMESTAMPではなくFLOATとして認識するため、残りのVBAを処理できるはずです。

編集

次のSELECTステートメントは、FORMAT句を含む整数を取り、ダブルキャストの結果として文字データ型を返します。

SELECT CAST(CAST(1234 as INTEGER FORMAT '99:99:99') AS CHAR(8));

時刻を含む列をCHAR(8)として明示的にキャストするSELECTステートメントを使用してレコードセットを開こうとしましたか?

于 2012-06-22T18:43:57.557 に答える
1

今のところ、このタイムスタンプだけを変換することができました。ただし、利用可能なタイムスタンプ形式は多数あります。異なるデータ型から文字列に変換する SQL クエリを自動化できません。TERADATA VALUE を文字列として読み取るには、VBA が必要です。

    If Field_format = "99:99:99" then
    Sql = "Select Cast(Field_format as integer) from Mytable"
    Elseif Field_format = "99:99:99.999" then
    Sql = "Select Cast(Field_format as Float) from Mytable"
    Elseif Field_format = "99:99:99.999" then
    Sql = "Select Field_format from Mytable"
    End if
...
Set rs = CmdSqlData.Execute() 

teradata には非常に多くのデータ型 (約 400 以上) が利用可能であることに注意してください。上記のようにすべてを変換することはできません。

Teradata の値を文字列として読み取るように VBA を使いたかっただけです。 StackOverflow に VBA Expert が存在しないのは不思議です

于 2012-06-25T14:54:51.463 に答える
0

SQL Server データベースに接続している場合、タイムスタンプ データ型は、レコードが変更されたかどうかを判断するために使用されるバイナリ フィールドです ( SQL Server のタイムスタンプ列を日時形式に変換する方法を参照してください)。これは、時刻と日付を保持する日時フィールドとは異なります。

ADO でレコードセットから文字列を返すには、次のようにします。

Dim cn as ADODB.Connection
Dim rs as ADODB.Recordset
Dim strSQL as string
Dim strSomething as string

strSQL = "SELECT fld1 FROM tbl1"

Set cn = New ADODB.Connetion
cn.ConnectionString = {your connection string here}
cn.open
rs.open strSQL, cn
While Not rs.EOF
    strSomething = rs!fld1
Wend
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
于 2012-06-22T14:58:51.743 に答える