- ベストアンサー
AccessリンクテーブルFields.Countの取得
- CSVファイルをリンクしている場合、リンクテーブルのFields.Countを取得する際に、自動で付けられたフィールド0が無視されてカウントされる問題があります。
- フィールド0はCSVのフィールド名にならず、自動で付けられるため、正確なFields.Countを取得することができません。
- この問題に対する解決策や別の方法などをご存知の方は、教えていただけると助かります。
- みんなの回答 (2)
- 専門家の回答
関連するQ&A
- テーブルのリンク(ACCESS)
ACCESS2003で下記の記述で「実行時エラー ’3219’ 無効な処理です。」というエラーメッセージがでます。 外部mdbでテーブルをリンクさせるとこのエラーがでます。同じmdbファイルにデータテーブルを置くと問題なく処理できます。 参照設定も過去ログを見てチェックしています。 Dim dbs As DAO.Database Dim rst As DAO.Recordset Set dbs = CurrentDb Set rst = dbs.OpenRecordset("テーブル名", dbOpenTable) ACCESS97では何の問題もなかったのですが, 2003ではうまくいきません。 どうかよろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- Accessのテーブル定義作成をVBAから行う
こんばんは フィールド定義の方法はネットで検索してある程度分かりました。 しかし、次の指定が解りません。 値要求と空文字列の許可です。 指定しないとどちらもいいえになります。はいにするにはどうすればよいのでしょうか。 今は次のようにしています。 Dim Table As DAO.TableDef Dim Field As DAO.Field Set Field = Table.CreateField("フィールの名称", dbText, 文字列の長さ) Table.Fields.Append Field
- ベストアンサー
- Visual Basic
- Access 2000 の VB での テーブル作成について質問です。
下記のようにAccess 2000のVBからDAOを使ってテーブルを作っておりますが、 作るフィールドに規定値の設定もVBからできないのでしょうか?DAOだと無理なのでしょぅか? 教えてください Dim db As DAO.Database Dim tbdef As DAO.TableDef Dim flID As DAO.Field Set db = CurrentDb Set tbdef = db.CreateTableDef("テーブル") Set flID = tbdef.CreateField("ID", dbInteger) tbdef.Fields.Append flID db.TableDefs.Append tbdef db.Close: Set db = Nothing
- ベストアンサー
- Visual Basic
- DAOでテーブルを作成
DAOでテーブルを作成したいのですが 主キーにしてオートナンバー型にするにはどうすればいいですか? Sub MyTableCreate() Dim db As DAO.Database Dim tbdef As DAO.TableDef Dim Field1 As DAO.Field Dim Field2 As DAO.Field Set db = CurrentDb Set tbdef = db.CreateTableDef("T_test") Set Field1 = tbdef.CreateField("ID", dbInteger) Set Field2 = tbdef.CreateField("氏名", dbText, 20) tbdef.Fields.Append Field1 tbdef.Fields.Append Field2 db.TableDefs.Append tbdef db.Close: Set db = Nothing End Sub これで、IDフィールドを主キーにしつつ、 dbIntegerではなくオートナンバー型にしつつ、 主キーを付与する方法を教えてください。 DAOのType プロパティのヘルプを見たのですがありませんでした。 今回は http://www.accessclub.jp/dao/20.html を参考にしました。
- ベストアンサー
- オフィス系ソフト
- VBAでテーブル名とカラム名を動的に取得したい。
お世話になります。 VBAでMySQLに接続をし、DB操作をするものを作成しています。 ・Windows7 ・エクセル2007 ・MySQL 5.1 ・ODBC そこで、以下のことをしたいと思っています。 (1)ある特定のデータベースの中にあるテーブル名を全取得 (2)そのテーブル名を変数または配列に格納 (3)そのテーブル名をキーに、今度はフィールド名を全取得 私が組んでみた該当のソースの部分は、 Dim aaa As New ADODB.Recordset strSql = "show tables from testdb;" Set aaa = con.Execute(strSql) 'conはADODB.connection Dim j As Integer For j = 1 To aaa.Fields.Count MsgBox aaa.Fields(j -1).name Next ・・・とここまで来ました。 show tables from databaseで、データベースにあるテーブルを取得して、 aaa.Fields(j -1).nameには「Tables_in_testdb」が入ります。 その次に、もう消してしまったので無いのですが、 msgbox aaa.Fields("Tables_in_testdb")?とやってみたところ、 データベースに入っている一つのテーブル名だけしか取得できませんでした。 ソースが回りくどい気がする+テーブル名が取得出来ず、 大分煮詰まっています。。。 何かもっとうまい書き方や構文(サンプル)ありましたら教えてください!!!
- ベストアンサー
- Visual Basic
- VB.NETでのAccessテーブルリンク
現在、VB.NET上で操作し、Accessのテーブルのリンクをしているのですが、 リンク処理の直後に、最後にテーブルのリンク処理をしたテーブルを 開こうとすると、 「要求された名前、または序数に対応する項目がコレクションで見つかりません。」という エラーが出ます。 なお、リンクしたテーブルには、きちんと正しいリンクで開こうとしたテーブルが登録されています。 それで、最後にリンクしたのが悪いのかと思い、順番を変えると、 そのエラーは起こらずに通常に起動しました。 ですが、順番を変えただけで普通に動く、というのが なんだか腑に落ちません。(まあ、無事に動いているのでいいのですが(汗 ) 以下にリンク処理を記載します。 何故、このようなことが起こるのかわかる方いらっしゃいましたら、ご教授お願い致します。 予想でもかまいません。 Public Sub DBLink() LFlag = False Dim rs As ADODB.Recordset = New ADODB.Recordset Dim Sql As String = String.Empty Dim dbPName As String = String.Empty Dim tName() As String 'リンク先のパスを指定 Dim f As New frmLinkPath f.ShowDialog() f.Close() f = Nothing 'パスを指定したか否か If LFlag Then 'TMPのパスは固定 dbPName = PathLast(Application.StartupPath) & "TMP.mdb" 'リンクするテーブル名を取得 'mdbLには、テーブル名がカンマ区切りで入っています tName = mdbL.Split(",") 'リンク先のテーブルを削除 For i = 0 To tName.Length - 1 Sql = "DROP TABLE " & tName(i) rs.Open(Sql, cn) Call SLink(tName(i), dbPName) Next dbPName = PathLast(DBPath) & "MST.mdb" 'リンクするテーブル名を取得 tName = mdbS.Split(",") 'リンク先のテーブルを削除 For i = 0 To tName.Length - 1 Sql = "DROP TABLE " & tName(i) rs.Open(Sql, cn) Call SLink(tName(i), dbPName) Next Else MsgBox("リンク先が指定されなかったので、" & vbCrLf & "テーブルの再リンクをキャンセルします", MsgBoxStyle.OkOnly + MsgBoxStyle.Information, "") End If End Sub ''' <summary> ''' データベース再リンク ''' </summary> ''' <param name="psNm">リンクするテーブル名</param> ''' <param name="psMdb">リンク元データベース名</param> ''' <remarks></remarks> Public Sub SLink(ByVal psNm As String, ByVal psMdb As String) Try Dim lodDb As dao.Database Dim ltDef As dao.TableDef Dim lsSource As String Dim lsTarget As String Dim daoE As New dao.DBEngine 'リンク先データベースとリンクデータベース名を指定 lsSource = psMdb lsTarget = PathLast(Application.StartupPath) & "DATA.mdb" '既存のデータベースの場合は OpenDatabase を使用する) lodDb = daoE.OpenDatabase(lsTarget) '任意の名前でテーブル定義を作成する ltDef = lodDb.CreateTableDef(psNm) 'リンク先のテーブル名を指定する ltDef.SourceTableName = psNm 'リンク先のデータベースを指定する(対象がMDBの場合セミコロンの前は省略) ltDef.Connect = ";Database=" & lsSource '定義したテーブルをアペンド(追加)する lodDb.TableDefs.Append(ltDef) lodDb.Close() lodDb = Nothing Catch ex As Exception Debug.Print(ex.Message) 'Throw End Try End Sub
- ベストアンサー
- Visual Basic
- Access ADP テーブル 説明欄を取得したい
大変お世話になります。 Access 2007 ADPファイルにて SQL Server 2005 との接続でのシステムを運用しています。 テーブル情報のフィールド説明欄(Description) の値の一覧を取得したいと思い下記のプログラムを作ってみたのですが、Descriptionの値以外はおおむね取得できるのですが、説明欄のところがすべてエラーになってしまい説明欄の Description の取得ができません。 格納場所か、プロパティの参照の仕方が原因だと思うのですが、解決できません。 テーブルの説明欄(Description)値の参照の仕方をご存じの方がいらっしゃいましたら何卒ご教授いただければと存じます。 よろしくお願いいたします。 Dim Cn As ADODB.Connection Dim Rs As New ADODB.Recordset Dim SQL As String Dim i As Integer Set Cn = CurrentProject.Connection SQL = " SELECT dbo.テーブルA.* " SQL = SQL & " FROM dbo.テーブルA" Dim MyDB As New ADOX.Catalog Dim MyTable As ADOX.Table Dim MyField As ADOX.Column MyDB.ActiveConnection = CurrentProject.Connection Set MyTable = MyDB.Tables("テーブルA") Rs.Open SQL, Cn, adOpenForwardOnly, adLockReadOnly For i = 0 To Rs.Fields.Count - 1 MsgBox Rs.Fields(i).Name 'MsgBox MyTable.Columns(Rs.Fields(j).Name).Properties("Description").Value MsgBox Rs.Fields(i).Properties("Description").Value MsgBox Rs.Fields(i).ActualSize MsgBox Rs.Fields(i).Attributes 'MsgBox Rs.Fields(i).DataFormat MsgBox Rs.Fields(i).DefinedSize MsgBox Rs.Fields(i).NumericScale 'MsgBox Rs.Fields(i).OriginalValue MsgBox Rs.Fields(i).Precision 'MsgBox Rs.Fields(i).Properties("Description") MsgBox Rs.Fields(i).Status MsgBox Rs.Fields(i).Type 'MsgBox Rs.Fields(i).UnderlyingValue MsgBox Rs.Fields(i).Value Next Set MyDB = Nothing Rs.Close Set Rs = Nothing Cn.Close Set Cn = Nothing Exit Sub
- ベストアンサー
- オフィス系ソフト
- Vbaでアクセスからエクセルにリンクテーブルする
Vbaでアクセスからエクセルにリンクテーブルするには? エクセルの情報: C:\Users\Desktop¥新規 Microsoft Excel ワークシート.xlsx シート1の情報: フィールド1 フィールド2 あああ aaa いい iii ううう uuu なのですが、 アクセスからVBAでリンクするにはどうすれば良いでしょう? 手作業なら 外部データ→エクセル→外部データの取り込み→リンクテーブルを作成してソースデータにリンクする でリンクできますが、vbaで行いたいです。 Sub Sample01() Dim db As DAO.Database, tb As DAO.TableDef Set db = CurrentDb Set tb = db.TableDefs("Sheet1") tb.Connect = ";DATABASE=" & CurrentProject.FullName & ";TABLE=Sheet1" tb.RefreshLink ' リンク情報の更新 End Sub このコードは意味が違いますよね エクセルのパスとシート名を指定してリンクする方法を教えてください。 最終定期にはシートをループして複数のテーブルを作成したいのです。 リンクが無理ならインポートでもOKです。
- ベストアンサー
- オフィス系ソフト
- ACCESS 処理件数の取得
更新した件数を取ろうとしています。 下記のような処理をしている場合どう値をとればいいのでしょうか? rst.RecodCountでとろうとしたらテーブル内の件数(?)が取れてしまったようなのですが・・・ Dim rst As DAO.Recordset rst.Fields(1) = rstWork.Fields(1) rst.Update
- ベストアンサー
- オフィス系ソフト
- アクセス リンク先バックアップテーブルが重複しない
お世話になっております。 アクセスで、リンクさせたテーブルを リンク先でバックアップをとっています。 Dim athDB As DAO.Database Dim tdfSet As DAO.TableDef Dim strLinkDB As String Set athDB = CurrentDb Set tdfSet = athDB.TableDefs("T_サンプル") strLinkDB = Mid(tdfSet.Connect, 11) Debug.Print strLinkDB Set tdfSet = Nothing Set dbDB = Nothing '------------------------------------ Dim appAccess As Access.Application Dim BKname As String Set appAccess = CreateObject("Access.Application") With appAccess .OpenCurrentDatabase strLinkDB .DoCmd.TransferDatabase acImport, "Microsoft Access", _ strLinkDB, acTable, "T_サンプル", "BK_サンプル_" & Format(Date, "yymmdd") .Quit End With Set appAccess = Nothing 立ち上げ時に上記を実行して リンクテーブル(T_サンプル)を、リンク先でバックアップをとる処理を設定していますが、 これだと立ち上げる度にバックアップテーブルができてしまいます。 同じテーブル名がある場合は、この処理をしない・・・としたいのですが どのように設定すると良いのでしょうか? ご教示のほど よろしくお願いします。
- ベストアンサー
- Visual Basic
お礼
なるほど。検証ありがとうございます。 しかしDAOからADOにしただけで、他のソースは弄ってないのに、 何で成功したのでしょうね・・・。 疑問が残りますが、どうもありがとうございました^^