• ベストアンサー

ADOでテーブルにハイパーリンクを追加したい(アドレスと表示文字列は別)

アクセスのtblのURLフィールドに 表示文字列→aaa URL→http://www.yahoo.co.jp/ を追加したいのですがうまくいきません。 (URLフィールドのデータ型はハイパーリンク型です) Sub test() Dim moji As String Dim URL As String Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "C:\Documents" & "\access.mdb" Set rs = New ADODB.Recordset rs.Open "tbl", cn, adOpenStatic, adLockPessimistic moji = "aaa" URL = "http://www.yahoo.co.jp/" rs.AddNew rs("URL") = "#" & moji & "#" rs("URL") = "#" & URL & "#" rs.Update Set rs = Nothing Set cn = Nothing End Sub を実行すると 結果は 表示文字列もアドレスも「http://www.yahoo.co.jp/」になってしまいます。(そりゃそうか) どうすれば 表示文字列→aaa URL→http://www.yahoo.co.jp/ が実現できるのでしょうか? よろしくお願いします。 (ヴァージョンは2003です)

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

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.2

No.1の方のリンク先のNo.2の者です。 先の回答でも少し触れましたが、ハイパーリンク型での「#」は日付/時刻型の 括りとは別物で、「囲い」ではなくて「区切り」になっている、ということです。 また、ご質問文中の以下のコードですが、 moji = "aaa" URL = "http://www.yahoo.co.jp/" rs.AddNew rs("URL") = "#" & moji & "#" rs("URL") = "#" & URL & "#" rs.Update これですと、「URL」フィールドが「#http://www.yahoo.co.jp/#」で 上書きされてしまって、先に代入した「#aaa#」が消えてしまいます。 No.1の方の回答の通り、一旦変数に受けるなどして、「aaa#~#」の 形にしてやってください(あくまで「#」は区切り文字なので先頭には無用です)。

lkhjlkhjlk
質問者

お礼

おお! 質問の中から飛び出して来たんですね! そうなんです。#aaa#が消えてしまいましたが rs("URL") = moji & "#" & URL & "#"でうまくいきました。 ありがとうございます。

その他の回答 (1)

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.1

"aaa#http://www.yahoo.co.jp/#" で設定してみてください。 http://oshiete1.goo.ne.jp/qa4936098.html の#2の方が示されているURLも参照してください。

lkhjlkhjlk
質問者

お礼

できました。 なんだ。簡単ですね。 そちらも読んでみます。ありがとうございます。

関連するQ&A

  • ハイパーリンクをADOで追加したい

    こんばんは。 テーブル1のハイパーリンク型のフィールドに テキストのアドレスを追加して、 クリックすると開くようにしたいのですがうまくいきません。 (エクセル→アクセス(2003)) Sub ハイパーリンクを追加() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Desktop\db1.mdb" Set rs = New ADODB.Recordset rs.Open "テーブル1", cn, adOpenKeyset, adLockOptimistic rs.AddNew rs!番号 = 1 rs!リンク = "C:\Users\Desktop\test.txt" rs.Update rs.Close cn.Close Set rs = Nothing Set cn = Nothing End Sub これを実行すると 見た目としてはハイパーリンクが追加されたように見えるのですがクリックしても何も起こりません。 「ハイパーリンクの挿入」を確認してみると 表示文字列は C:\Users\Desktop\test.txt が入力されていますが アドレスは空欄です。 アドレスにも「"C:\Users\Desktop\test.txt"」を入れるにはどうすればいいのでしょうか? よろしくお願いします。

  • ADO+ODBCでテーブルに接続する時のエラー

    VB6.0(SP6)から、ADOとODBCでMySQLに接続しました。 '-------------------------------------------- Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim strCn As String Set cn = New ADODB.Connection strCn = "dsn=MySQL;uid=user;pwd=" cn.CursorLocation = adUseClient cn.Open strCn Set rs = New ADODB.Recordset rs.Open "select * from tbl;", cn, adOpenDynamic, adLockPessimistic Set DataGrid1.DataSource = rs '-------------------------------------------- データグリッドコントロールにテーブルの内容を表示させようとしているのですが、rs.Openの行でエラーが出てしまいます。エラーメッセージは「複数ステップの操作でエラーが発生しました。各状態の値を確認してください」です。 SQL文を変えて試してみると、何故かデータ型がDECIMALのカラムが含まれているとエラーになります。 DECIMALだといけないかと思うと、挿入は問題なく出来ます。 cn.Execute "insert into tbl (id,decimal_clm) values (10,900);" ご存知の方がいらっしゃいましたら宜しくお願いします。

    • ベストアンサー
    • MySQL
  • 【ACCESS2000】 VBAの更新処理に条件を加えたい。

    下記のような更新処理のVBAを組みました。 これにIDが5のものを更新するというのを加えるには どうすればよいでしょうか。 Dim cn As ADODB.Connection Dim rs As New ADODB.Recordset Set cn = CurrentProject.Connection rs.Open "tbl_D_売上", cn, adOpenKeyset, adLockOptimistic, adCmdTableDirect rs("入金方法") = 2 rs("入金方法名称") = "分割" rs.Update rs.Close Set rs = Nothing cn.Close Set cn = Nothing

  • Accessのテーブルの文字列フィールドにVBAでアクセスするには?

    いつもお世話になっております。困っていることがありますので教えていただければ幸いです。 AccessのテーブルAに、メモ型のフィールドBがあり、1000文字くらいの文字が入っています。VBAの関数Cの中でそのテーブルにアクセスし、1000文字をいろいろ処理したいと思っています。見よう見まねで試しに Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim FileNum As Integer Set cn = CurrentProject.Connection Set rs = New ADODB.Recordset rs.Open テーブルA, cn, adOpenDynamic, adLockOptimistic msgbox !フィールドB としてみたのですが、なぜか255文字までしか表示されません。VBAを用いてテーブル(やクエリ)にアクセスし、256文字以上の文字列を扱う方法はありませんでしょうか? 何かこちらで勘違いしているところがありましたら、ご指摘いただければと思います。よろしくお願いします。

  • 1つのフォームから複数のテーブルにレコード追加をやってみました。

    1つのフォームから複数のテーブルにレコード追加をやってみました。 そこで疑問があるのですが、Connectionは1つでRecordsetは追加するテーブルの数だけOpenが必要なのですか? 一応下記のコードで2つのテーブルにレコードを追加出来たのですが、素人の推測でやってみたので間違っている所がないか見て頂きたいです。 返答よろしくお願いします。 Dim cn As ADODB.Connection Dim rs1 As New ADODB.Recordset Dim rs2 As New ADODB.Recordset Set cn = CurrentProject.Connection Set rs1 = New ADODB.Recordset Set rs2 = New ADODB.Recordset Beep If MsgBox(Format(txt車両コード, "000000") & " " & txt登録番号 & Chr(13) & "を登録しますか?", 33, "確認! 登録") = vbOK Then rs1.Open "T車検証", cn, adOpenKeyset, adLockPessimistic rs2.Open "T所有者", cn, adOpenKeyset, adLockPessimistic rs1.AddNew rs1!車両コード = Me.txt車両コード rs1!登録番号 = Me.txt登録番号 rs1!交付年月日 = Me.txt交付年月日 rs1!初度年月 = Me.txt初度年月 rs1.Update rs2.AddNew rs2!車両コード = Me.txt車両コード rs2!所有者 = Me.txt所有者 rs2.Update rs1.Close: Set rs1 = Nothing rs2.Close: Set rs2 = Nothing cn.Close: Set cn = Nothing MsgBox Format(txt車両コード, "000000") & " " & txt登録番号 & Chr(13) & "を登録しました。", 64, "確認! 登録" End If End Sub

  • ADO 「Set」は使ったほうがいいのでしょうか?

    Sub test1() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection Set rs = New ADODB.Recordse End Sub Sub test2() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset End Sub この二つは同じ意味ですか? 「Set」は使ったほうがいいのでしょうか? よろしくお願いします。

  • Access ADOについて質問です。

    Access ADOについて質問です。 以下コードでレコードセットを返す関数を使用しています。 動作的には問題ないのですが、標準モジュール内のレコードセットをClose及びNothingしていないのが気になります。 Private Sub Form_Open(Cancel As Integer) Dim rs2 As ADODB.Recordset Set rs2 = New ADODB.Recordset Set rs2 = CreateRecordSet("SELECT * FROM T_Standard;") Set Me.Recordset = rs2 rs2.Close: Set rs2 = Nothing end sub '標準モジュール Public Function CreateRecordSet(strSQL As String) As ADODB.Recordset Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection cn.ConnectionString = "provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=O:\標準DB\StandardBackEnd.mdb" cn.Open Set rs = New ADODB.Recordset rs.Open strSQL, cn, adOpenStatic, adLockReadOnly Set CreateRecordSet = rs ' rs.Close: Set rs = Nothing   ←この部分 ' cn.Close: Set cn = Nothing   ←この部分 End Function 標準モジュール内ではCloseやNothingしなくてもメモリの開放は行われているのでしょうか? アドバイスよろしくお願いいたします。

  • VBA ADOのフィルタのアポストロフィーの意味は

    VBAで文字列はダブルコーテーション「”」で括りますが ------------------------------------------------ Sub ADO_Filter() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = CurrentProject.Connection Set rs = New ADODB.Recordset rs.Open "T社員名簿", cn, adOpenKeyset, adLockOptimistic rs.Filter = "質問タイトル LIKE '*田*'" rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub ------------------------------------------------ 上記の '*田*' のアポストロフィーはどういう時に必要なのでしょうか? LIKE演算子を使ってるからか Filterだからか など理由があれば教えて下さい。 また、「'」を使っているのに、以後がコメントにならないのも不思議です。 よろしくお願い致します。

  • 【VBA】アタッチとデタッチについての認識

    VBAを勉強中の者です。カテ違いならすいません。 ******************************************************* Sub test1() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection Set rs = New ADODB.Recordset cn.Open "Provider=SQLOLEDB;Data Source=localhost\SQLEXPRESS; " & _ "Initial Catalog=" & データベース名 & ";" & _ "Integrated Security=SSPI" rs.Open "テーブル1", cn, adOpenStatic, adLockOptimistic MsgBox rs.RecordCount rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub ******************************************************* このコードで アタッチは「Set cn = New ADODB.Connection」、 デタッチは「cn.Close: Set cn = Nothing」 になりますか? ご教授よろしくお願い致します。

  • レコードは2行あるのに「-1」が返ってくる

    accessです。 テーブル1にレコードは2行あるのに、下記のコードを実行すると「-1」が返ってきます。 なぜでしょうか? ------------------------------------------------------------ Sub test() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = Application.CurrentProject.Connection Set rs = cn.Execute("SELECT * FROM テーブル1") MsgBox rs.RecordCount rs.Close cn.Close Set rs = Nothing Set cn = Nothing End Sub ------------------------------------------------------------ ご教示よろしくお願い致します。

専門家に質問してみよう