Microsoft Access Club Access超初心者対象Forum Access初級者対象Forum Access初・中級者対象Forum Access VBA Tips Forum DAO、ADO、SQL Forum

     

リストへもどる

新着の投稿記事


タイトルRe^4: odbcでの接続に関して
記事No16895   [関連記事]
投稿日: 2017/05/21(Sun) 10:44
投稿者yobo
返信いただきありがとうございます

実際に実行してためしてみます。
また疑問点かありましたらお教えください。
ありがとうございました。


> とりあえず下記の感じでどうかな。SQLサーバー環境はないので、Accdbとの接続で試したら、パスが見つからない場合のエラー番号は3024でした。
>
> On Error GoTo EH
>
> Dim myArray As Variant
> myArray = Array("dbo_ver")
> Set db = CurrentDb()
> For i = LBound(myArray) To UBound(myArray)
> Set TD = db.TableDefs(myArray(i))
> TD.Connect = "ODBC;Driver={SQL Server};SERVER=******"
> TD.Attributes = DAO.TableDefAttributeEnum.dbAttachSavePWD
> TD.RefreshLink
> Set TD = Nothing
> Next i
> Set db = Nothing
>
> EH:
> Select Case Err.Number
> Case 3024
> MsgBox "'" & DBPath & "'が見つかりません。サーバーの接続を確認してください。"
> Case Else
> MsgBox Err.Number & ":" & Err.Description
> End Select
> End Function

タイトルRe^3: odbcでの接続に関して
記事No16894   [関連記事]
投稿日: 2017/05/20(Sat) 18:53
投稿者hatena
とりあえず下記の感じでどうかな。SQLサーバー環境はないので、Accdbとの接続で試したら、パスが見つからない場合のエラー番号は3024でした。

    On Error GoTo EH

    Dim myArray As Variant
    myArray = Array("dbo_ver")
    Set db = CurrentDb()
    For i = LBound(myArray) To UBound(myArray)
        Set TD = db.TableDefs(myArray(i))
        TD.Connect = "ODBC;Driver={SQL Server};SERVER=******"
        TD.Attributes = DAO.TableDefAttributeEnum.dbAttachSavePWD
        TD.RefreshLink
        Set TD = Nothing
    Next i
    Set db = Nothing

EH:
    Select Case Err.Number
    Case 3024
         MsgBox "'" & DBPath & "'が見つかりません。サーバーの接続を確認してください。"
    Case Else
         MsgBox Err.Number & ":" & Err.Description
    End Select
End Function

タイトルRe^2: odbcでの接続に関して
記事No16893   [関連記事]
投稿日: 2017/05/20(Sat) 17:22
投稿者yobo
>
> 試していないので、想像ですが、サバーが落ちていたら、
>
> TD.RefreshLink
>
> 辺りでエラーがでませんか。そこで出ないなら、試しに、OpenRecorsetしてみるとか。
>
> エラーがでたら、エラートラップでプログラムを終了すればいいのでは。
ご回答ありがとうございます。

TD.RefreshLinkの後にどのような
エラー回避文をかけばよろしいのてしょうか?

タイムアウトとか設定とかあったのですが
実際どのような文をかけばいいのかわからなく
もうしわけありません

タイトルRe: odbcでの接続に関して
記事No16892   [関連記事]
投稿日: 2017/05/19(Fri) 23:21
投稿者hatena

試していないので、想像ですが、サバーが落ちていたら、

TD.RefreshLink

辺りでエラーがでませんか。そこで出ないなら、試しに、OpenRecorsetしてみるとか。

エラーがでたら、エラートラップでプログラムを終了すればいいのでは。

タイトルodbcでの接続に関して
記事No16891   [関連記事]
投稿日: 2017/05/19(Fri) 16:38
投稿者yobo
OS: windoww8
Access Version: 2016

vba初心者です。
以下のソースでリンク先のテーブルを接続して読みに行ってるのですが
サーバが落ちていたりして,読めないときにはタイムアウトなど設定し
プリグラムを終了できるのでしょうか?
いろいろ調べてみたのですが、実際にどのように記述していいかわから
ないのでお教えください。
_______________________________________

Dim myArray As Variant
myArray = Array("dbo_ver")
Set DB = CurrentDb()
For i = LBound(myArray) To UBound(myArray)
Set TD = DB.TableDefs(myArray(i))
TD.Connect = "ODBC;Driver={SQL Server};SERVER=******"
TD.Attributes = DAO.TableDefAttributeEnum.dbAttachSavePWD
TD.RefreshLink
Set TD = Nothing
Next i
Set DB = Nothing
End Function

タイトルRe^17: Access側からExcelへ接続するADO接続等に失敗。確実に接続できるVBAコードをご教示下さい。大変困っています。
記事No16890   [関連記事]
投稿日: 2017/05/06(Sat) 22:11
投稿者Cosmos_18
> わたしなら、こうします。
>
>
> > xlBookName = "ABC.xlsx"
> > fullPathADO = "C:\SQL\" & xlBookName
> >
> > strSQL = "INSERT INTO" ' (0)INSERT INTO文。
> > strSQL = strSQL & " T_Master" ' (1)レコード追加先のテーブルの名。
> > strSQL = strSQL & " ( id, data )" ' (2)レコード追加先のフィールド名をSQL文に明記。2フィールド。
> > strSQL = strSQL & " SELECT" ' (3)テーブルのフィールド名を選択。
> > strSQL = strSQL & " id, data" ' (4)テーブルのフィールド名を選択。
> > strSQL = strSQL & " FROM" ' (5)どこ「から」データを取ってくるのか。
> > strSQL = strSQL & " [Excel 8.0;" ' (6)◎参照元となるExcelブックの種類が「Excel 8.0」。
> > strSQL = strSQL & "IMEX=1;" ' (7)IMEX=1 ですべての行を文字列として扱っている。
> > strSQL = strSQL & "Database=" ' (8)◎"Database=" でExcelブックをSQLで扱えるデータベースとして扱っている。
> > strSQL = strSQL & fullPathADO ' (9)参照元となるExcelブックのフルディレクトリ。
> > strSQL = strSQL & "]." ' (10)参照元となるExcelブック名は"]."とブラケット(大括弧)で閉じ、次との間にピリオドを打つ。
> strSQL = strSQL & "[ourCStr$];" ' (11)Sheet名
>
> >
> > For i = i To j
>  
> ourCStr = "T_" & i
>
> cn.Execute Replece(strSQL, "ourCStr", ourCStr)
>
> Next

お礼が遅くなって、すみません。
なるほど、こういうコーディングをすればすっきりスマートになりますね。
ありがとうございます!

タイトルRe^16: Access側からExcelへ接続するADO接続等に失敗。確実に接続できるVBAコードをご教示下さい。大変困っています。
記事No16889   [関連記事]
投稿日: 2017/05/03(Wed) 10:28
投稿者tkwan
> '成功した(と思われる)SQL&VBAコード


わたしなら、こうします。


>             xlBookName = "ABC.xlsx"
>             fullPathADO = "C:\SQL\" & xlBookName
>   
>             strSQL =          "INSERT INTO"                           ' (0)INSERT INTO文。
>             strSQL = strSQL & " T_Master"                             ' (1)レコード追加先のテーブルの名。
>             strSQL = strSQL & " ( id, data )"                         ' (2)レコード追加先のフィールド名をSQL文に明記。2フィールド。
>             strSQL = strSQL & " SELECT"                               ' (3)テーブルのフィールド名を選択。
>             strSQL = strSQL & " id, data"                             ' (4)テーブルのフィールド名を選択。
>             strSQL = strSQL & " FROM"                                 ' (5)どこ「から」データを取ってくるのか。
>             strSQL = strSQL & " [Excel 8.0;"                          ' (6)◎参照元となるExcelブックの種類が「Excel 8.0」。
>             strSQL = strSQL & "IMEX=1;"                               ' (7)IMEX=1 ですべての行を文字列として扱っている。
>             strSQL = strSQL & "Database="                             ' (8)◎"Database=" でExcelブックをSQLで扱えるデータベースとして扱っている。
>             strSQL = strSQL & fullPathADO                             ' (9)参照元となるExcelブックのフルディレクトリ。
>             strSQL = strSQL & "]."                                    ' (10)参照元となるExcelブック名は"]."とブラケット(大括弧)で閉じ、次との間にピリオドを打つ。
              strSQL = strSQL & "[ourCStr$];"                           ' (11)Sheet名

> 
>        For i = i To j
 
            ourCStr = "T_" & i

            cn.Execute Replece(strSQL, "ourCStr", ourCStr)

          Next

タイトルRe^16: Access側からExcelへ接続するADO接続等に失敗。確実に接続できるVBAコードをご教示下さい。大変困っています。
記事No16888   [関連記事]
投稿日: 2017/05/01(Mon) 22:19
投稿者tkwan
 
> やはり、( id, data )というフィールド名はINSERT INTO文では必要なんでしょうか?

取得元(Excel)と取得先(Access)のフィールド名が、同一のフィールド名であれば必要ないです。

タイトルRe^15: Access側からExcelへ接続するADO接続等に失敗。確実に接続できるVBAコードをご教示下さい。大変困っています。
記事No16887   [関連記事]
投稿日: 2017/05/01(Mon) 17:48
投稿者Cosmos_18
tkwanさん、みなさん、ありがとうございます。

できました!

Excel2列100万行10シート以上、合計2000万行以上のデータをSQL&VBAコードで書き終え、F5キー(実行ボタン)を押して、夜明け前5時頃寝て、昼12時頃起きても、まだVBAは走っていました。一瞬、失敗かと思ったのですが、昼食後確認してみたらAccess側で合計2000万行以上のデータベースが出来上がっていました。tkwanさん、hatenaさん、みなさんのご指導のたまものと感謝いたしております。

もう2、3回、新規Accessファイルと新規Excelブックで、以下のSQL&VBAコードを実行してみて、
それでも全部RUNして完全に成功するかどうか、確認できたらこの長いスレッドをクローズしたいと思います。
もう2、3日、お待ちください。

やはり、( id, data )というフィールド名はINSERT INTO文では必要なんでしょうか?
"Excel 8.0"は"Excel 16.0"とかにしてはいけない、デフォルトのまま"Excel 8.0"と記述するようにとMicrosoft公式サイトに書いてありました。

tkwanさん、hatenaさん、みなさんに質問ばかりで問題丸投げでは失礼だと思い、この連休、夜明けまでたった一人でプチ・プログラミングしていました。

'成功した(と思われる)SQL&VBAコード


For i = i To j

xlBookName = "ABC.xlsx"
fullPathADO = "C:\SQL\" & xlBookName

ourCStr = "T_" & i

strSQL = "INSERT INTO" ' (0)INSERT INTO文。
strSQL = strSQL & " T_Master" ' (1)レコード追加先のテーブルの名。
strSQL = strSQL & " ( id, data )" ' (2)レコード追加先のフィールド名をSQL文に明記。2フィールド。
strSQL = strSQL & " SELECT" ' (3)テーブルのフィールド名を選択。
strSQL = strSQL & " id, data" ' (4)テーブルのフィールド名を選択。
strSQL = strSQL & " FROM" ' (5)どこ「から」データを取ってくるのか。
strSQL = strSQL & " [Excel 8.0;" ' (6)◎参照元となるExcelブックの種類が「Excel 8.0」。
strSQL = strSQL & "IMEX=1;" ' (7)IMEX=1 ですべての行を文字列として扱っている。
strSQL = strSQL & "Database=" ' (8)◎"Database=" でExcelブックをSQLで扱えるデータベースとして扱っている。
strSQL = strSQL & fullPathADO ' (9)参照元となるExcelブックのフルディレクトリ。
strSQL = strSQL & "]." ' (10)参照元となるExcelブック名は"]."とブラケット(大括弧)で閉じ、次との間にピリオドを打つ。
strSQL = strSQL & "[" ' (11)次にテーブルとなるシート名の始まりを告げるブラケットとの間にピリオドを打つ。
strSQL = strSQL & ourCStr ' (12)◎まさにこれがAccess側のテーブル名そのものとなる。シート名を文字列変数で記述。
strSQL = strSQL & "$];" ' (14)$(ドルマーク)を必ず記述。$の後はブラケットとセミコロンと"で完全にSQL文を終了。

cn.Execute strSQL

Next

以上。

タイトルRe^14: Access側からExcelへ接続するADO接続等に失敗。確実に接続できるVBAコードをご教示下さい。大変困っています。
記事No16886   [関連記事]
投稿日: 2017/05/01(Mon) 12:41
投稿者tkwan
> デバッグ出力してみると、cnとstrSQLはきちんと値が入っていますが、オブジェクト変数rsは空っぽでした。
それは当然です。
なぜなら、strSQLに代入されたコマンドは追加クエリのSQLなんですから、列は返りません。

当然、Trialという名前のテーブルは存在している必要があります。

もしTrailが存在いていないのなら、SQLは

SELECT * INTO Trail FROM ・・・

というテーブル作成クエリでないといけません。

それから、
> Debug.Print rs
なんていうメソッドでrsが空かどうかは確認できません。
そもそも、こんなメソッドは実行できないでしょう?

ページの先頭へ 前ページへ戻る