• ベストアンサー

oracle8、Access97でFormat関数が使えない

oracle側のテーブルにtoshitsukiフィールドがあり、そこに「200203」というデータがあるとき、Access97のフォーム上にこのデータを呼び出すときテキストボックスに「2002/03」と変換したいのですがどうすればいいのですか?現状はうまくできません。今現在のコードは下のようにしています。 Dim myDate as Date Dim myStr as String --------------------------- Me.txt_toshitsuki=Oracle.Fields("toshitsuki").Value myDate=Me.txt_toshitsuki myStr = Format(myDate, "yyyy/mm") これだとブレークポイントをし、確認してみたところ Me.txt_toshitsukiのところでは「200203」ですが myDateのところでは「2448/02/18」 myStrのところでは「2448/02」となります。 どこが原因なのでしょうか?初心者なのでお願いします

質問者が選んだベストアンサー

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.2

これはきっと、toshitsuki フィールドが整数だから、ですね。 Me.txt_toshitsuki は、整数で 200203 が入っているわけで、それを Date な型に 渡されても VBA は、あなたが考えていることまで察することはできませんから、 標準的な変換(基準日からの経過日数)をしてしまいます。 myDate を整数型にして、Format は、Format(myDate, "0000\"/\"00") という感じ にしたらうまくいく、かも。 # VB はよく知らないです。文字列中にダブルクォーテーションを入れるあたりが自信なし

その他の回答 (1)

回答No.1

結論からいうと、myDateをDate型からStr型に変更すれば、動きます。 >myDate=Me.txt_toshitsuki オラクル側の型が何なのか不明ですが、 テキストボックスに入れたものは、文字列ですので、 文字列を強引にDate型へ変換しています。 基準日?(1889/12/31)より200203日目の日付を取得していると思われます。

関連するQ&A

  • Access2000上でのCStrコマンドの記述に関する質問です

    いつもお世話になっております。 Access2000で、あるデータをCSVファイルに変換しようと思って、各方面のご意見により、VBAで下記の通り記述し、実行致しました。 変換するフィールドの数が少なければ問題なく実行できますが、そのフィールド数が34種類以上になれば、「行継続文字( _ )を使いすぎています」との警告と共にエラーが発生します(なお、今回実行したいのは34種類のフィールドです)。 「CStr(adoRs.Fields("フィールド1").Value) ~ (adoRs.Fields("フィールド34").Value) 」と、1行で記述する等、何か良い方法がないものかと悩んでおります。 もし、解決方法をご存じの方がおられれば、その方法を教えて頂きたく、宜しくお願い致します。 ’--(ご参考)---------------------------------------------------- Dim adoRs As New ADODB.Recordset Dim strsql As String Dim strFile As String strsql = "SELECT フィールド1,フィールド2, ・・・・フィールド34" & _ "FROM ○○ファイル ORDER BY フィールド1" adoRs.Open strsql, CurrentProject.Connection strFile = "C:\AAAデータファイル.CSV" Open strFile For Output Access Write As #1 Do Until adoRs.EOF Write #1, _ CStr(adoRs.Fields("フィールド1").Value), _ CStr(adoRs.Fields("フィールド2").Value), _               ・                ・                ・ CStr(adoRs.Fields("フィールド34").Value) adoRs.MoveNext Loop adoRs.Close Close #1 ’---------------------------------------------------------

  • EXCEL Spirit関数 繰り返し処理

    EXCEL VBAでテキストファイルを読み込み、Spirit関数にて項目内容を書き出しています。 下記のコードの日付部分は1日~31日まで繰り返しになります。 Dim maxRow As Integer Dim maxCol As Integer Dim i As Long Dim mytxtfile As String, myStr As String Dim myRange As Range Dim mySp() As String Dim sh1 As Worksheet On Error GoTo myError mytxtfile = "D:\明細.TXT" Set sh1 = Worksheets("元データ") Set myRange = sh1.Range("A1") sh1.Cells.Clear Open mytxtfile For Input As #1 Do Until EOF(1) Line Input #1, myStr myRange.Offset(i, 0).Value = myStr myStr = Replace(myStr, """", "") mySp = Split(myStr, ",") myRange.Offset(i, 1).Value = mySp(0) '卸名 myRange.Offset(i, 2).Value = mySp(1) 'コード myRange.Offset(i, 3).Value = mySp(2) 'フラグ myRange.Offset(i, 4).Value = mySp(6) '納品先 myRange.Offset(i, 5).Value = mySp(7) '店舗 myRange.Offset(i, 6).Value = mySp(23) '日付 ---------ここから myRange.Offset(i, 7).Value = mySp(26) '1日_金額A myRange.Offset(i, 8).Value = mySp(27) '1日_金額B myRange.Offset(i, 9).Value = mySp(34) '1日_金額C --------ここまでが 1日分です。これが31日まで続きます。 i = i + 1 Loop Close #1 '31日までのデータが無い場合のエラーを無視する(データが存在する日まで書き出す) myError: Resume Next sh1.Range("A:A").Delete 'txt取込作業列を削除 End Sub カンマ区切りの位置は、15ずつ増えますので 繰り返し処理したいのですが、うまくいきません。 最初は、金額A だけの書き出しだったため、 1行ずつ書いていたのですが、金額B、Cの列も必要になりました。 for next で すっきりした書き方を教えていただけないでしょうか? 宜しくお願い致します。

  • Access2007でフォームのリストボックスから

    Access2007でフォームのリストボックスから選択したフィールドをクエリしたいのですが どうもうまくいきません。 テーブル数は10個くらいあり、全テーブルのフィールド数は100超あります。 テーブル1に一意のIDがあり、それに対して他のテーブルとリレーションシップで繋いでいます。 1.全テーブルのフィールドリストを作るのに「全テーブルクエリ」を作成 (テーブル1.IDのLEFT JOINでくっつけています。) 2.全テーブルクエリのコピーを作成し、リストから選択したフィールドのみを表示 3.選択した全フィールドのデータにNull以外のデータのみを表示するようフィルターをかける 以下、作成したVBAですが、実行すると、3.がうまく動いてくれず、Null値も表示してしまいます。 しかし、エラーは出ません。 フィルター適用になっていますが、最後のフィールドにフィルターマークが出ているだけで 実際はかかっていません。。 ========== Option Compare Database Option Explicit Dim dbs As Database Dim qdf As QueryDef Dim IDX As Long 'リストのインデックス用 Dim i As Integer Dim F_name() As String Dim strDate As String '現時刻取得 Dim Path As String Public Sub 抽出_Click() Set dbs = Application.CurrentDb strDate = Format(Now, "_mmdd_hh:mm") If Me.リスト.ItemsSelected.Count = 0 Then MsgBox "抽出する項目を選択してください。" Exit Sub Else Application.DoCmd.CopyObject , "抽出結果" & strDate, acQuery, "全テーブルクエリ" Set qdf = dbs.QueryDefs("抽出結果" & strDate) For IDX = 1 To Me.リスト.ListCount Let qdf.Fields(Me.リスト.ItemData(IDX - 1)) _ .Properties("ColumnHidden").Value = Not (Me.リスト.Selected(IDX - 1)) Next End If DoCmd.OpenQuery "抽出結果" & strDate ReDim F_name(qdf.Fields.Count) For i = 1 To qdf.Fields.Count F_name(i - 1) = qdf.Fields(i - 1).Name If qdf.Fields(F_name(i - 1)).Properties("ColumnHidden").Value = True Then '項目が非表示の場合何もしない Else       'Null以外のデータを抽出 DoCmd.ApplyFilter "抽出結果" & strDate, "('" & F_name(i - 1) & "') Is Not Null" End If Next i dbs.Close Set qdf = Nothing Set dbs = Nothing End Sub ============== ですが、違うやり方があるのではないか・・と1週間くらい悩んでおります。 やりたいことは、 (1)まず100個以上あるフィールドをフォームのフィールドリストから選定。 (2)選定したフィールドのデータにNullまたは長さ0の値があればその行ごと非表示にする。 この2つです。 とりかかってから1カ月以上経ちます。。 お知恵をお貸しください!!!

  • InStrRev関数の使い方について

    後方から検索にならず、簡易な物で試して居ります。 Dim myStr As String myStr = "54321" MsgBox InStrRev(myStr, "5") 5が出て欲しいが、1と出ます。 間違いは何処でしょうか。 InStrRevを間違って覚えているのか。。。 宜しくお願い致します。

  • アクセスを教えて下さい

    アクセスを教えて下さい。 Microsoft Visual Basic に以下入力したのですがうまくいきません。 ある数字0~999999までの数字を登録数字より、数字以上、数字未満で抽出したいのですがうまくいきません。 If IsNull(Me!数字以上) Or IsNull(Me!数字未満) Then key(1) = "" Else Dim MyStr1, MyStr2 As String MyStr1 = (Me!数字以上) MyStr2 = (Me!数字未満) key(1) = "登録数字 between #" & MyStr1 & "# " _ & "and #" & MyStr2 & "#" End If 初心者で時間が経つばかりで前に進みません。 宜しくお願い致します。

  • Access2000データのテキストファイル変換方法について

    いつもお世話になっております。 以前、この欄で質問させて頂いたCSVデータ変換の件については随分助かり、ありがとうございました。 このたび、Access2000のデータを、テキストファイル(タブによる区切り)に変換(明細ごとの区切りは改行文字を使用)する必要があり、下記のような記述を致しましたが、どうしても、「カンマ区切り」にしかなりません。 インターネットで調べると、テキスト(タブ区切り)の拡張子は「.txt」と説明されているのですが、何か記述が間違っているのでしょうか? 宜しくお願い致します。 (追伸)将来、必要になるかも知れないので、テキスト(スペース区切り)の記述についてもお願いできれば、と思います。 -- 記述内容 --------------------------------------------------- Dim adoRs As New ADODB.Recordset Dim strsql As String Dim strFile As String Dim 番号 As Long strsql = "SELECT" For 番号 = 1 To 34 If 番号 > 1 Then strsql = strsql & "," strsql = strsql & "フィールド" & CStr(番号) Next 'strsql = strsql & "FROM WT売掛管理表 ORDER BY フィールド1" strsql = "SELECT フィールド1,フィールド2,フィールド3,フィールド4,フィールド5,フィールド6,フィールド7,フィールド8,フィールド9,フィールド10,フィールド11,フィールド12,フィールド13,フィールド14,フィールド15,フィールド16,フィールド17,フィールド18,フィールド19,フィールド20,フィールド21,フィールド22,フィールド23,フィールド24,フィールド25,フィールド26,フィールド27,フィールド28,フィールド29,フィールド30,フィールド31,フィールド32,フィールド33,フィールド34 " & _ "FROM WT売掛管理表 ORDER BY フィールド1" adoRs.Open strsql, CurrentProject.Connection strFile = "C:\データフォルダ\変換データ.txt" Open strFile For Output Access Write As #1 Do Until adoRs.EOF For 番号 = 0 To 32 Write #1, CStr(adoRs.Fields(番号).Value), Next Write #1, CStr(adoRs.Fields(番号).Value) adoRs.MoveNext Loop adoRs.Close Close #1 MsgBox "データ変換処理が終了しました。", vbInformation Exit Sub -----------------------------------------------------

  • Access 日付範囲の条件指定

    いつも質問ばかりですいません。 指定の日付範囲外の値に対してメッセージを出して再入力させたいのですが上手くいきません。 《条件》 今日より先は NG 今日より2日以上前は NG 1日前:OK 今日:OK Dim txt01 As Date ' Dim txt02 As String ' Dim txt03 As Integer Dim ckDate As Date ckDate = Date - 2 '日付のチェック If IsNull(Me.txt01) Then 'Nullチェック MsgBox "txt01=Null" Me.txt01.SetFocus Exit Sub ElseIf IsDate(Me.txt01) <> True Then MsgBox "日付形式ではありません。" Me.txt01.SetFocus Exit Sub ElseIf Me.txt01.Value < Date Then '前チェック Debug.Print Me.txt01.Value MsgBox "今日より先" Me.txt01.SetFocus Exit Sub ElseIf Me.txt01.Value <= ckDate Then MsgBox "2日以上前!" Me.txt01.SetFocus Exit Sub End If 2番目の、Elseifからの日付範囲の条件設定が上手くいきません。 Me.txt01.valueの後ろを"<"を">"にしたり、"="を付けたりしましたが、希望通りになりません。 多分、もっとスマートな書き方が有るとは思うのですが、あとあとメンテナンスしやすい書き方をお教え頂けたら幸いです。

  • oracle8に接続、Access97での質問

    oracleのテーブルのフィールドには日付がありまして、このフィールドにはデータとして200010と入っています。これをAccess97のフォーム上で読み込んだときは2000/10という風に表示させたいのですがどうすればいいのですか?反対にAccess97のフォーム上に2000/10(定型入力で9999\/99;0、書式でyyyy/mm)と入力して登録ボタンをクリックしたときolacleのテーブルに200010という風にデータを格納したいのですがどうか教えてください。よろしくお願いします。

  • 20060224をyyyy年mm月dd日にしたい

    こんばんは。教えてください。。 Sub テスト() Dim mystr As String mystr = "20060224" mystr = Format(mystr, "yyyy年mm月dd日") MsgBox mystr End Sub これを実行するとオーバーフローします。 結果としては、「2006年02月24日」と表示させたいです。 mystr = Format(CDate(mystr), "yyyy年mm月dd日") にすると、型が一致しませんになります。 ご回答よろしくお願いします。

  • Access Dlookup関数について

    Dlookupで悩んでいます。 ExcelのVlookと違い、“数字”のコードでなければ引っ張ってこれないのでしょうか? 以下、がその内容です。 「T_得意先マスタ」の得意先コードフィールドに aaa というコードがあり、得意先名フィールドに ○○商事 とあります。 どうやってもできないのです。 なぜか、aaa ではなく、数字(例. 123)にすると出ます。 教えてください。 Private Sub 得意先コード_AfterUpdate() Dim a As Variant, b As String b = "得意先コード = " & Me![得意先コード] a = DLookup("得意先名", "T_得意先マスタ", b) If IsNull(a) = True Then Me.テキスト1.Value = "該当がありません。": Me![得意先コード] = Null Else Me.テキスト1.Value = a End If End Sub