• 締切済み

accessのデータ変換について

access2000を使用しており悩んでおります。 年月日_text(テキスト型)  20020303 20020404 のデータを日付型にしたいのですが 下記のソースではデータ型が合わないと エラーになります。なぜでしょうか? ソース(抜粋) Dim myRs As New ADODB.Recordset tb.Columns.Append "年月日_Date", adDate myRs![年月日_date] = CDate(myRs![年月日_text]) 

みんなの回答

noname#4564
noname#4564
回答No.3

  # 文字列処理を多用すると、算術演算のみの処理より、10~20倍以上のオーダーで処理速度が遅くなります。 最初に8桁の数値に変換してから除算と剰余で、操作するのが最速です。 Dim lngTmp As Long lngTmp = CLng(myRs.Fields("年月日_text").Value) myRs.Fields("年月日_date").Value = DateSerial(lngTmp \ 10000, (lngTmp Mod 10000) \ 100, lngTmp Mod 100) # As New 宣言も性能を考慮するなら避けた方が無難。 # Accessで作る程度のシステムだから、性能や品質なんかどうでもいい、という割り切った考え方もあるのかもしれませんが。  

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.2

例えば myRs![年月日_date] = CDate(Mid([年月日_text],1,4) & "/" & Mid([年月日_text],5,2) & "/" & Mid([年月日_text],7,2)) のように[年月日_text]のテキストをMid関数で4桁・2桁・2桁にし"/"を入れ日付型データに合わせる。

  • ducati
  • ベストアンサー率29% (308/1062)
回答No.1

"/"がついていないからと思われます。 一気にCDateとしないで、一度Midで"/"をつけた形にしてみてください。 例: 20020303を「2002/03/03」にする。 strA=myRs![年月日_text] strB=mid(strA,1,4) & "/" & mid(strA,5,2) & "/" & mid(strA,7,2) myRs![年月日_date] = CDate(strB) これでどうでしょうか?

関連するQ&A

  • ACCESS97で作成したmdbファイルに書き込む為の記述

     ADOを使用してExcelで作成したデータをACCESS97で作成したmdbファイルに書き込む処理を行いたいと思います。 書籍を見ながらコードを記述しているのですが、1,2,の項目については問題なく処理ができるのですが、最後のmdbファイルへの書き込み処理がどうしてもうまくいきません。 主に出力されるエラーは「現在のプロバイダはIndex機能に必要なインターフェイスをサポートしていません。」というものです。いろいろ試行錯誤したのですが解決できませんでした。 やはりACCESS97で作成したmdbファイルだからダメなのでしょうか? 原因と対処方法を教えていただければ幸いです。よろしくお願いします。以下はmdbファイルへの書き込みのサンプルコードです。 Dim myFile As String Dim myTbl As String Dim myRng As Range Dim myCon As New ADODB.Connection Dim myRS As New ADODB.Recordset Dim i As Integer myFile = ThisWorkbook.Path & "\sampleDB.mdb" myTbl = "社員" Set myRng = ThisWorkbook.Worksheets(1).Range("A1").CurrentRegion With myCon .Provider = "Microsoft.Jet.OLEDB.4.0" 'Access(Jet)用のOLE DBプロバイダを使用 .Open myFile End With myRS.Open myTbl, myCon, adOpenStatic, adLockPessimistic, adCmdTableDirect myRS.Index = "社員ID" For i = 2 To myRng.Rows.Count myRS.Seek myRng(i, 1).Value If myRS.EOF Then myRS.AddNew For j = 1 To myRng.Columns.Count myRS.Fields(myRng(1, j).Value).Value = myRng(i, j).Value Next Next myRS.Update myRS.Close Set myRS = Nothing myCon.Close Set myCon = Nothing

  • ACCESS フォームやコントロールはクラス?

    オブジェクト志向を勉強し始めた者です。 今まで特に意識していなかったのですが、 ACCESSのフォームやテキストボックス等のコントロールは、 クラスなんじゃないか、と思ったんですが これは正しいでしょうか? レコードセットをopenする時に使用する宣言の Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset でいうと ADODBがクラスなのでしょうか? ADODB.Connection、 ADODB.Recordsetがクラスなのでしょうか? ご教授の程、よろしくお願いします。

  • ACCESS VBA

    ACCESSで検索フォームを作りたいと思っています。 VBAを使って行きたいと思うのですが、うまくいきません。 希望としては、該当するレコードのデータを抽出したいです。 よろしくお願いいたします。 ※現段階でのソースを書いてみました。 最終的に行いたい処理とは違うのですが、根本的に間違っているようなので簡略化しました。 /------------------------------------------------/ Private Sub コマンド1_Click() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim sql As String '接続 Set cn = CurrentProject.Connection 'レコードセットを取得 Set rs = New ADODB.Recordset sql = "SELECT * FROM 従業員データ " & _ "WHERE 年齢=30" rs.Open sql, cn, adOpenDynamic, adLockReadOnly rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub /------------------------------------------------/

  • データ型をメモ型にして既存テーブルにフィールドを追加したい(ACCESS ADOX)

    Sub test() Dim cat As New ADOX.Catalog Dim tb As New ADOX.Table cat.ActiveConnection = CurrentProject.Connection 'テーブルを開く Set tb = cat.Tables("テーブル1") tb.Columns.Append "フィールド1", ad○○ Set cat = Nothing Set tb = Nothing End Sub これで既存のテーブルにフィールドを追加できることを知ったのですが データ型をメモ型にするにはどの「ad○○」にすればいいのでしょう? (文字数が多いためテキスト型では収まりません) オブジェクトブラウザで見ても、多すぎてどれなのかわかりません。 ご教授よろしくお願い致します。

  • エクセル側からアクセスへデータ転送

    エクセル側からアクセスにデータ転送する時に Sub Data_Add() Dim db As New ADODB.Connection Dim Rs As New ADODB.Recordset db.Open _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\Users\Owner\Desktop\1.mdb;" アクセス2003にデータを転送する場合はこれでうまくいきましたが、 アクセス2007にデータを転送しようと、 \1.accdb;"とすると、データベースの形式を認識できません。となってしまいます。 どうしたらいいでしょうか? だれか教えて頂けませんか?

  • Access VBA フォームに表示したい

    Access2000で、帳票フォームにSQLの値を表示させたいのですが、 以下のコードだとフォーム上に最後のレコードしか表示されません。 取得したデータを正しく表示するにはどうしたらよいでしょうか。 ・フォームのtext1のコントロールソースにfld1と書く 以外の方法でできますか? できればすべて非連結で、作成したいです。 (本当はフォームのrecordsourceも設定したくないのですが それは無理でしょうか?) よろしくお願いいたします。 Private Sub Form_Load() Dim conn As Connection Dim rs As ADODB.Recordset Dim strSql As String Set conn = CurrentProject.Connection Set rs = New ADODB.Recordset strSql = "select * from table1" rs.Open strSql, conn, adOpenKeyset, adLockOptimistic, adCmdText Me.RecordSource = strSql rs.MoveFirst Do Until rs.EOF me!text1 = rs!fld1 rs.MoveNext Loop rs.Close Set rs = Nothing conn.Close Set connn = Nothing End Sub

  • ACCESSとMySQLとの連携 TEXT型取得で質問です。

    MySQLの勉強を今年から始めておりますがAccessとの連携で詰まっ てしまいました。 今MySQLをDBにし、Access2003をUIにして、運用しようと考えてお ります。 ■症状 VBAにてMyODBCドライバに接続を行い、MySQL内のデータベースに接 続し、テーブルの情報を取得する際に、int型やVarchar型は正常に ACCESS側にて取得できるのですが、TEXT型が取得できません。 (文字列0の""が返されます。) ■情報は以下の通りです。 ・WindowsXP SP2 (パッチ最新) ・MicroSoftAccess2003 (パッチ最新) ・MySQL 5.0.45-community-nt MySQL Community Edition (GPL) ・MyODBC5.01.01.00 ※MySQL環境、PHP、Apache環境はXAMPP1.6.4のものです。 ・MySQL文字コードは「UTF-8」にて統一 ・VBAでのMyODBC接続はADOにて接続(ソース抜粋後述) ■試したこと ・TEXT型フィールドの値をVARCHAR型に変更するとACCESS側で取得  可能 ・VBAで接続制御を行わず、テーブルリンクを行うと取得可能 ・Accessからのデータ投入は問題ありませんでした。  (TEXT型フィールドへの反映も問題ありません。) ・データ自体はPhpMyAdminやPHP5、コマンドラインからは正常に  取得可能 ・取得判別フラグ ■ソース抜粋(ACCESS2003側です。) Private Sub cmdSubmit_Click() Dim adoDb As New ADODB.Connection Dim adoRS As ADODB.Recordset Dim strSQL As String Dim blnFlg As Boolean Dim blnFlg = False adoDb.Open "Driver={MySQL ODBC 5.1 Driver};" & _ "server=localhost; database=***; uid=***; pwd=***;" ' adoDb.Open "dsn=***; uid=***; pwd=***;" strSQL = "select * from kanagawa where post = '" & Me.txtPost & "';" Set adoRS = adoDb.Execute(strSQL) Do Until adoRS.EOF MsgBox adoRS!pref blnflg = True Exit Do Loop If blnflg = False Then MsgBox "該当レコードはありません。" End If adoRS.Close adoDb.Close Set adoRS = Nothing Set adoDb = Nothing End Sub ※「***」は実際にはIDとパスワード等を入れております。 ※コメントアウトしてある接続構文も試しましたが結果は  変わりませんでした。 ※HappyHappyIsland様のサイトを参考にさせて頂きました。 ■MYSQLデータベース情報 DATABSE:zipcode TABLE :kanagawa カラム id int(7) not null PRIMARY post varchar(8) not null INDEX k_pref text k_area text k_addr text pref text area text addr text 今回はテストしたので、TEXT型をVARCHARに変更できましたが、 実運用では、255文字では対応できないフィールドが存在します ので、VARCHAR対応は出来ません。 有効策が見出せない場合は、将来的にPHP5でのUI構築を考えてお りましたので、前倒しで構築も考慮しておりますが、何卒ご教示 宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • Access VBAでのデータ抽出の仕方

    Access VBAでのデータ抽出の仕方 Access VBAでデータを抽出して、テキストボックスにデータを配置したいと思います。 Formにtxt1~txt10までのテキストボックスが10個あります。 テーブルからデータを引っ張ってきてレコードセットにいれます。 Dim objADOCON As ADODB.Connection Dim objADORS As ADODB.Recordset Dim strSQL As String Dim SQL As string SQL = "Select * from Table1" Set objADOCON = Application.CurrentProject.Connection Set objADORS = objADOCON.Execute(SQL) これでレコードセットを取得しました。このレコードセットは「ID」列があり、プライマリーキーを設定しています。またZAIKOという列もあります。 ID=001の時、在庫は100 ID=002の時、在庫は200 といったように条件を絞って、テキストボックスに値を入れたいと思います。 objADORS.Filter = "[ID] = '001'" txt1.value = objADORS!ZAIKO objADORS.Filter = "[ID] = '002'" txt2.value = objADORS!ZAIKO ..... を10回繰り返せば条件毎に値がセットするのはわかります。 ただし、あまりスマートなやり方ではなく、もっといい方法があるんじゃないかと思うのですが考えつきません。 何か良い方法、手段がありましたらお教え下さい。 よろしくお願いします。

  • エクセルに入力した文字でアクセスにフィルタをかける

    ADOどころかVBAもよくわかっていない初心者です。 顧客情報DBというアクセスのファイルのテーブル「tb顧客」に フィルターをかけてフィールド「会社名カナ」に「カブシキ」が入っている データのみをエクセルに張り付けています。 以下でうまく動くのですが、本当は「*カブシキ*」のところをエクセルで入力した任意の言葉 (Cells(5,3)に入力された文字)をワイルドカードで挟んで実行させたいです。 変数を使ったり、そのままCells(5,3).valueを入れたり、と試してみたのですが うまくいきません。 正しい書き方がお分かりになる方、よろしくお願いします。 Sub 検索_顧客() Set myCon = New ADODB.Connection myCon.Provider = "Microsoft.Ace.OLEDB.12.0" myCon.Open "C:\Users\Desktop\顧客情報DB.accdb" Set myRS = New ADODB.Recordset If Cells(5, 3).Value <> "" Then With myRS .Open "tb顧客", myCon, adOpenDynamic, adLockOptimistic .Filter = "会社名カナ like '*カブシキ*'" End With End If Range("D9").CopyFromRecordset myRS

  • EXCEL→Access ADO接続

    お世話になります 現在ADOにてEXCEL側からAccessDBにアクセスし 値を取得しているのですが 現在下方向に貼り付けしているのですが 横方向に貼り付けさせる方法はありますか? 下記参考(現状VBAです) 現状:日付で絞込みをしています 日付け絞込みをしてヒットしたものに対して下方向に貼り付けています それを横方向に貼り付けさせたいのです Private Sub CommandButton1_Click() Dim myConn As ADODB.Connection Dim myRs As ADODB.Recordset Dim mySQL As String Dim myConstr As String Dim myDBFName As String Dim myPswd As String Dim tableName As String Dim orderDate As String Dim shipDate As String orderDate = Format(DateValue(DTPicker1.Value), "mm/dd/yyyy") shipDate = Format(DateValue(DTPicker2.Value), "mm/dd/yyyy") myDBFName = "Accessパス" myPswd = "" myConstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _ & myDBFName & ";Jet OLEDB:Database Password=" & myPswd & ";" mySQL =SQL文 Set myConn = New ADODB.Connection myConn.Open myConstr Set myRs = New ADODB.Recordset myRs.Open mySQL, myConn Worksheets("シート名").Range("開始セル名").CopyFromRecordset myRs myRs.Close Set myRs = Nothing myConn.Close Set myConn = Nothing Unload Me End Sub わかる方ご教授願います

専門家に質問してみよう