すみません、000-000は抽出されます。 000ー000が抽出されません。(長音符)
SQLには問題はなさそうてすね。
こちらのサンプルでは問題なく抽出されます。
ちょっと原因が想像できないです。
データは縦に持つので、そんな事はやりません。正規化して下さい。
週を跨ぎ返事が遅くなりすみません。
SELECT T_出力.ID, T_出力.[〒], T_出力.住所1, T_出力.住所2, T_出力.社名1, T_出力.社名2, T_出力.社名3, T_出力.役職, T_出力.氏名, T_出力.敬称, T_出力.連名役職, T_出力.連名, T_出力.連名敬称, T_出力.備考 FROM T_出力 WHERE (((T_出力.[〒]) Not Like "#######"));
こちらSQL文です。
フィールド:LenB(StrConv(Nz([T_出力].[〒],""),128)) 抽出条件:<>"7"
これはおそらく全角文字以外がふくまれているかを判定したかったのでしょう。ただし、この式ではその目的を達成してません。 話がややこしくなるので、まずはこの条件は削除しておいて、Not Like "#######"の抽出条件の方が解決してから取り組みましょうか。
Not Like "#######"
しかし、今度は消す前は抽出されていた000-000が抽出されなくなってしまいました。
私の提示したシンプルなサンプルのテーブルにそのデータを追加して試してみてください。 こちらのサンプルでは抽出されました。
問題のクエリに他に抽出条件はありませんか。
わからないようならSQLビューにして表示されるSQL文をコピーしてここに貼り付けてください。
hatena さんに責任を負わせたいのではないのでご安心を(笑)。 私もいろいろ試した上で、そのようにしたいと自己責任で判断しました。
同じサンプルを作成したところ、Hatenaさんと同じ実行結果になりました。 他に何か抽出条件が設定されているのではないかと思い探してみたところ、
上記が見つかりました。 いつ書いたのか、なぜ書いたのか、どんな意味なのか全く思い出せませんでしたが、こちらを消したところ、000-000や000&000は抽出されるようになりました。
しかし、今度は消す前は抽出されていた000-000が抽出されなくなってしまいました。 7桁の半角数字以外のレコードを抽出するという目的がまだ達成できていません。
ちょっと考えが進んだので、書き残させて下さい。 試した感じだと、この両方が自分更新可・他者更新不可で動くようです。
Set rs = db.OpenRecordset("table1", dbOpenTable, dbReadOnly + dbFailOnError) Set rs = db.OpenRecordset("table1", dbOpenTable, dbFailOnError, dbReadOnly)
判断できるのは、 Access のほうで、「ロールバックを想定してるんならおまえが操作するんだよな?」ということで 切り替えてくれるらしいこと。 一応 LockEditにdbReadOnlyが受け付けられるパターンがあること……です。 ただし、(飽くまでも私の環境では)何か動作が不安定な感じがあるので、 MS の公式外、保証外、裏技、昔はできたけど既に見捨てられた何かなのかもしれません。
このへんのせいで、日本語でも英語でも解説が散らばったのかもしれません。 「かもしれない」が続きましたが、改めて言って、 hatenaさんが書いて下さったところが本道なのだと思います。 私もそちらに従わせていただきます。
いえ、全然、正統ではないです。 WEB上の情報と、自分の少ない経験のみですので。
結局、最終的には自分で試してみるしかないですね。
あら、読み落としてました。 ちょっと意味不明な注意書きですね。
ちなみにこんなことをする必要はありませんが、間違えてたまたま dbReadOnly + dbFailOnError にしたところ、自分は更新できる・他のユーザは更新できないという振る舞いもしました。このへんも完全に謎ですが、正統と思われる hatena さんの書いて下さった感じで使いたいと思います。
>>hatena様、情報を整理して紹介して下さってありがとうございます。 hatenaさんがおっしゃれば心強いです! 私もやっと安心です。
ただ、公式もたまに間違っているときがありますので、実際にテストして確認するということも必要になります。
それが、まさに Database.OpenRecordset メソッド (DAO) のページにあるようで…… https://learn.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/database-openrecordset-method-dao
注: dbReadOnly を Options 引数または LockedEdit 引数のどちらか一方で使用することはできますが、両方では使用できません。 両方の引数で使用すると、実行時エラーが発生します。
ただ、検索していると昔は入れられた節があり???、修正漏れなのかもしれません。 「間違った(?)解説」は、海外の出版物でもちょくちょく出会い、本当に戸惑いました。
ともあれ本当にありがとうございました!
気になって検索してみたら、間違った(?)解説してあるサイトが結構ありますね。 このような場合はまずはMSの公式を参照して確認するのがいいです。 ただ、公式もたまに間違っているときがありますので、実際にテストして確認するということも必要になります。
DAOのOpenRecordset dbReadOnlyでテーブルを読み取り専用にできるでしょうか? OptionsとLockEditに入れられるようですが、
DAOのOpenRecordset dbReadOnlyでテーブルを読み取り専用にできるでしょうか?
OptionsとLockEditに入れられるようですが、
dbReadOnly はOptionsだけだと思いますが。(下記参照)
Options引数 RecordsetOptionEnum 列挙 (DAO) | Microsoft Learn
LockEdit引数 LockTypeEnum 列挙 (DAO) | Microsoft Learn
読み取り専用になるのが解説によって「自分だけ」「他人だけ」「全員」で分かれています。
上記のMSの公式のリンク先の解説では、
dbReadOnly Recordset を読み取り専用として開きます。
となってます。開いたRecordsetが読み取り専用になるということだと読み取れます。他のユーザーが更新できないとは書かれてません。
他のユーザーがレコードを変更できないようにするなら、下記ではないでしょうか。
dbDenyWrite 他のユーザーが Recordset のレコードを変更できないようにします。
私は下記のように理解しています。もし、試した結果が異なる場合は指摘してください。
'このレコードセットのみ読み取り専用。他ユーザーは更新可能。 Set rs = CurrentDb.OpenRecordset("テーブル名", dbOpenTable, dbReadOnly) 'このレコードセットは更新可能。他ユーザーは更新不可。 Set rs = CurrentDb.OpenRecordset("テーブル名", dbOpenTable, dbDenyWrite) 'このレコードセットも他ユーザーも更新不可。 Set rs = CurrentDb.OpenRecordset("テーブル名" ,dbOpenTable ,dbReadOnly + dbDenyWrite)
フィールドの書式プロパティもなにも設定されてませんか。
こちらで作成したサンプルでは正しい結果になってますね。
上記の画像のようなサンプルを新規作成した場合はどうなりますか。
定型入力は何も設定されておりませんでした。
レポート出力の際は7つテキストボックスを作成し、それぞれ=Mid([〒],1,1)~=Mid([〒],7,1)という風にしています。ですので郵便番号フィールドは、更新クエリでハイフンを""に置換し、7桁数字の書式にしています。
000-000や000&000は、7桁数字以外が抽出されているかどうかの検証中に抽出条件から外れていたので例えとして提示致しました。
"7桁の数字"以外が正確に抽出されるためにはどのような抽出条件を設定すれば良いか、というのが本題です。 Not Like "#######" この抽出条件で一見問題ないように見えて、例のようなデータが抽出条件に引っかからなかったので、原因と対策を知りたいです。
そのフィールドに定型入力が設定されてませんか。 もし、されているならその設定を教えてください。
ちなみに郵便番号フィールドなら、000-0000 という書式になるはずですが、 000-000 というのはどのような事情でしょうか。
000-000が、本来抽出されなければならないはずが抽出されませんでした。 000&000も、本来抽出されなければならないはずが抽出されませんでした。(別サンプル)
ちなみに、0から始まる郵便番号が正しく表示されるよう、郵便番号フィールドは短いテキスト型になっています。
「抽出条件をすり抜けてしまいました」とは、具体的にどうなったのでしょうか。 「000-000」というデータが表示されたのか、表示されなかったのか、どちらでしょうか。
Not Like "#######" なら表示されるのが正常です。 こちらでサンプルを作成しましたが、表示されました。
回答ありがとうございました。 ご指導の通りの方法を検討します。
おふたりとも大変分かりやすい説明です、ありがとうございました。 MOS合格できそうです。
人間がコードを記述するときに楽をするための仕様ですね
VBAはコードを記述する際に、高頻度でその用途で使われるモノは省略しても良いとして、様々なモノが省略可能なように作られました
つまり、Me.も.Valueも[]で囲むのも、省略した場合、コードが実行されるタイミングで記述されているとみなしてコードが実行されています
Me.
.Value
[]
これらは、省略したとき、意図しない解釈がされてしまう場合には明記する必要があります
例えば「1」という名前のテキストボックスを作成します。これをコード上で記述する場合、単に「1」と記述すると、コードの解釈としては数値の「1」を記述したと解釈されます
1
a = 1 + 1
この記述は常にa=2です
a=2
a = [1] + 1
この記述は「aに「1という名前のコントロール」の値に「1」を加えた値を代入する」となります
a
レコードセットを取得してから重複を削除するのは難しいので、 サブフォームのレコードソースのクエリから、SQLでフィルターと同じ抽出条件を設定して、DISTINCTで重複を排除したレコードセットを取得すると考え方になります。
便利だなと思ったのはMe.まで入力すると入力補助でテキストボックスとかの名前が出てくることくらいです。
これはかなりのメリットだと思いますが。これがあるおかげで、コード入力がはかどりますし、タイプミスによるエラーも防げます。 また、Me.があれば、フォーム(レポート)に関連するコントロール、メソッド、プロパティと分かりますので、コードを後から読むときに解読しやすいです。ないと、それ以外の何かの可能性も考慮しつつ読む必要がでてきます。 他の関数などと名前が重複したりすると、バグの原因になりかねません。
.Valueに関しては、教材に載っているけど説明が乏しく、何のためにあるのか全く分かりません。
Valueはそのオブジェクトが持っている値を取得するプロパティです。 このプロパティはよく使用することが多いので既定のプロパティとされていて、省略することができます。 値を取得したいときは省略してもいいのですが、関数などと名前が重複したりするとバグの原因になったりするので、大きなプロジェクトの場合は、省略しない方がいいと思います。
また、テキストボックスを[]で囲む時と囲まない時の違いが分かりません。
通常は囲まなくても大丈夫ですが、コントロール名に半角スペースが含まれていたり、VBAのコードとバッティングする記号が含まれていたりするとコントロール名と認識できない場合がありまので、その時は必要になります。
Accessのvbaで処理する方法を探していたんですね。それは気づけませんでした。
以下の記載は参考になるでしょうか。
https://support.microsoft.com/ja-jp/office/sharepoint-にデータをインポート-リンク-または移動する-65bf7b03-74bf-445c-959a-24b7a401ddee
https://naberium.com/2022/07/22/adoを利用してsharepoint-listの一覧を取得する/ ↑これはエクセルの場合ですが
以下のように有料のドライバーとしても売ってるので、それなりに難しそうですね。 https://www.cdata.com/jp/kb/tech/sharepoint-odbc-access-linked-tables.rst
すずやんさま 返信ありがとうございます。 手動でパスを取得する方法はわかっています。 access vbaで処理する方法を模索しています。 access側でボタンをクリックするとsharepointのドキュメント内フォルダを 一覧表示するのが目的です。 宜しくお願いいたします。
すずやん様 もしかすれば、Accessも歴史が長く、ハードもソフトも未熟・非力な時に決まった軽量な既定がそのまま遺産になったのかもしれないですね。
ともあれ、ありがとうございました。
んー、なんでしょうね。 「とりあえず実行は許可して結果から判断できるようにする」てのを既定値にしているのかもしれませんね。 じゃないと「OptionDatabase.Execute」の設定や記述がおかしいのか、それとも実行した内容がおかしいのかが判別しにくいから、というのかもしれません。
ヘルプだと同じような RecordsetOptionEnum を持つ OptionDatabase.Execute メソッドの既定値が dbInconsistent らしいんです。 「(既定値) 矛盾した更新を実行します (Microsoft Access ワークスペースのみ)。」 実験してませんが、ソースぐらいしか指定しないと矛盾を許してるんでしょうか。 Executeのほうも、何故既定があえてユルいのか不思議です。
sharepointは使っていませんが、このあたりの方法ではどうでしょうか。 https://begin-prog.site/sharepoint-how-to-get-file-folder-link
ちょっと調べてみましたが、たしかに分からないですね。 希望する動作の値をセットするしかないのかもしれません。
Shift-JISに無い文字を抽出すれば良いのであれば、いったんcsv(sjis)に出力して文字化けさせて csvを一時テーブルにインポートして元テーブル結合させて絞り込み~じゃダメですかね。 元テーブルに名前以外の主キーがある前提ですが、こんな感じのvbaで。
Public Sub A() Dim 元テーブル名 As String Dim 一時テーブル名 As String Dim 主キー As String Dim 一時ファイル As String
元テーブル名 = "T_住所録" 一時テーブル名 = "TMP" 主キー = "ID" 一時ファイル = "C:\temp\名前リスト.CSV"
On Error Resume Next CurrentDb.Execute "drop table " & 一時テーブル名, dbFailOnError DoCmd.TransferText acExportDelim, , 元テーブル名, 一時ファイル, True DoCmd.TransferText acImportDelim, , 一時テーブル名, 一時ファイル, True
Dim Qdf As DAO.QueryDef Dim strSQL As String strSQL = "SELECT A.氏名 FROM " & 元テーブル名 & " A INNER JOIN " & 一時テーブル名 & " B ON A." & 主キー & "=B." & 主キー & " WHERE INSTR(B.氏名,'?')" Set Qdf = CurrentDb.CreateQueryDef("文字化けチェッククエリ", strSQL)
CurrentDb.QueryDefs("文字化けチェッククエリ").Sql = strSQL CurrentDb.QueryDefs.Refresh
Set Qdf = Nothing DoCmd.OpenQuery "文字化けチェッククエリ" End Sub
「環境依存文字」という定義が今となっては難しいですね。
はしご高、立つ崎は、現在のUnicode対応のフォントならたいてい普通に表示できると思いますが。 どのようなフォントを使かおうとしているのでしょうか。
ここはチャット型掲示板ではないので、最低でも1日程度はまたないとそもそも網にかかってないのだろうと感じることがありますね
ちょっと前に似たような話題がありました 外字を含むレコードを抽出したい
スマートな方法はありません
りんごさん相対関係は最初作ろうと思ってたのですが内容的にお互い全てが対象となりますので不可なのです。品目はコンボで選択する形になっており、よくあるパターンとして絞り込みは出来る様にしているのです。
サブにはA、Bの品目・金額は両方とも入力必要で(相対品目として)、繰越入力の時は説明した通りの決まった切り分けとなります。
品目の相対関係を管理するテーブルを別に作らないの? まずは、きちんと正規化しておかないと、質問して完成しても、設計が杜撰だから破綻している、捨てて下さいとなるだけですよ。残念ながら。
りんごさん イメージとしてはそんな感じですが、日付や取引先(Nullの場合あり)・伝票番号・その他テキストはメインテーブルにしてます。サブにはA、Bの品目・金額は両方とも入力必要で(相対品目として)、繰越入力の時は説明した通りの決まった切り分けとなります。
品目A 金額A 品目B・金額B >あ 1000 繰越 1000 >繰越 500 い 500
要するにこういう事?
りんごさん 財務の振替の様なもので伝票に記入するイメージで直感的にそれに沿った処理フォームにしています。実際は 品目A 金額A 品目B・金額B あ 1000 繰越 1000 繰越 500 い 500 で金額AとBの合計値は合致させる必要があります。(繰越入力フォーム基のクエリでこうなる様にしてます) 繰越時はA・Bどちらかになるかは決まってますが日々の処理ではどちらかになるかはランダムなのです。 これも説明不足でした(すみません)。
>●処理イメージ(サブ) 品目A 金額A 品目B・金額B あ 1000 い 500
但し品目のグループにより品目A・金額Aに入るか品目B・金額Bに入るかの切り分けがあります
下記のようにしない理由は? ●処理イメージ(サブ)
Accessのテーブルやクエリのデータを貼り付ける場合は下記で、Markdown書式のテーブルに変換して貼り付けてください。
Markdown Tables generator
掲示板で必要なサンプルファイルは下記のフォームから送信してください。
Microsoft Access 掲示板用ファイル送信
すみません、000-000は抽出されます。
000ー000が抽出されません。(長音符)
SQLには問題はなさそうてすね。
こちらのサンプルでは問題なく抽出されます。
ちょっと原因が想像できないです。
データは縦に持つので、そんな事はやりません。正規化して下さい。
週を跨ぎ返事が遅くなりすみません。
こちらSQL文です。
これはおそらく全角文字以外がふくまれているかを判定したかったのでしょう。ただし、この式ではその目的を達成してません。
話がややこしくなるので、まずはこの条件は削除しておいて、
Not Like "#######"
の抽出条件の方が解決してから取り組みましょうか。私の提示したシンプルなサンプルのテーブルにそのデータを追加して試してみてください。
こちらのサンプルでは抽出されました。
問題のクエリに他に抽出条件はありませんか。
わからないようならSQLビューにして表示されるSQL文をコピーしてここに貼り付けてください。
hatena さんに責任を負わせたいのではないのでご安心を(笑)。
私もいろいろ試した上で、そのようにしたいと自己責任で判断しました。
同じサンプルを作成したところ、Hatenaさんと同じ実行結果になりました。
他に何か抽出条件が設定されているのではないかと思い探してみたところ、
上記が見つかりました。
いつ書いたのか、なぜ書いたのか、どんな意味なのか全く思い出せませんでしたが、こちらを消したところ、000-000や000&000は抽出されるようになりました。
しかし、今度は消す前は抽出されていた000-000が抽出されなくなってしまいました。
7桁の半角数字以外のレコードを抽出するという目的がまだ達成できていません。
ちょっと考えが進んだので、書き残させて下さい。
試した感じだと、この両方が自分更新可・他者更新不可で動くようです。
Set rs = db.OpenRecordset("table1", dbOpenTable, dbReadOnly + dbFailOnError)
Set rs = db.OpenRecordset("table1", dbOpenTable, dbFailOnError, dbReadOnly)
判断できるのは、
Access のほうで、「ロールバックを想定してるんならおまえが操作するんだよな?」ということで
切り替えてくれるらしいこと。
一応 LockEditにdbReadOnlyが受け付けられるパターンがあること……です。
ただし、(飽くまでも私の環境では)何か動作が不安定な感じがあるので、
MS の公式外、保証外、裏技、昔はできたけど既に見捨てられた何かなのかもしれません。
このへんのせいで、日本語でも英語でも解説が散らばったのかもしれません。
「かもしれない」が続きましたが、改めて言って、
hatenaさんが書いて下さったところが本道なのだと思います。
私もそちらに従わせていただきます。
いえ、全然、正統ではないです。
WEB上の情報と、自分の少ない経験のみですので。
結局、最終的には自分で試してみるしかないですね。
あら、読み落としてました。
ちょっと意味不明な注意書きですね。
ちなみにこんなことをする必要はありませんが、間違えてたまたま dbReadOnly + dbFailOnError にしたところ、自分は更新できる・他のユーザは更新できないという振る舞いもしました。このへんも完全に謎ですが、正統と思われる hatena さんの書いて下さった感じで使いたいと思います。
>>hatena様、情報を整理して紹介して下さってありがとうございます。
hatenaさんがおっしゃれば心強いです! 私もやっと安心です。
それが、まさに Database.OpenRecordset メソッド (DAO) のページにあるようで……
https://learn.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/database-openrecordset-method-dao
ただ、検索していると昔は入れられた節があり???、修正漏れなのかもしれません。
「間違った(?)解説」は、海外の出版物でもちょくちょく出会い、本当に戸惑いました。
ともあれ本当にありがとうございました!
気になって検索してみたら、間違った(?)解説してあるサイトが結構ありますね。
このような場合はまずはMSの公式を参照して確認するのがいいです。
ただ、公式もたまに間違っているときがありますので、実際にテストして確認するということも必要になります。
dbReadOnly はOptionsだけだと思いますが。(下記参照)
Options引数
RecordsetOptionEnum 列挙 (DAO) | Microsoft Learn
LockEdit引数
LockTypeEnum 列挙 (DAO) | Microsoft Learn
上記のMSの公式のリンク先の解説では、
dbReadOnly Recordset を読み取り専用として開きます。
となってます。開いたRecordsetが読み取り専用になるということだと読み取れます。他のユーザーが更新できないとは書かれてません。
他のユーザーがレコードを変更できないようにするなら、下記ではないでしょうか。
dbDenyWrite 他のユーザーが Recordset のレコードを変更できないようにします。
私は下記のように理解しています。もし、試した結果が異なる場合は指摘してください。
フィールドの書式プロパティもなにも設定されてませんか。
こちらで作成したサンプルでは正しい結果になってますね。
上記の画像のようなサンプルを新規作成した場合はどうなりますか。
定型入力は何も設定されておりませんでした。
レポート出力の際は7つテキストボックスを作成し、それぞれ=Mid([〒],1,1)~=Mid([〒],7,1)という風にしています。ですので郵便番号フィールドは、更新クエリでハイフンを""に置換し、7桁数字の書式にしています。
000-000や000&000は、7桁数字以外が抽出されているかどうかの検証中に抽出条件から外れていたので例えとして提示致しました。
"7桁の数字"以外が正確に抽出されるためにはどのような抽出条件を設定すれば良いか、というのが本題です。
Not Like "#######"
この抽出条件で一見問題ないように見えて、例のようなデータが抽出条件に引っかからなかったので、原因と対策を知りたいです。
そのフィールドに定型入力が設定されてませんか。
もし、されているならその設定を教えてください。
ちなみに郵便番号フィールドなら、000-0000 という書式になるはずですが、
000-000 というのはどのような事情でしょうか。
000-000が、本来抽出されなければならないはずが抽出されませんでした。
000&000も、本来抽出されなければならないはずが抽出されませんでした。(別サンプル)
ちなみに、0から始まる郵便番号が正しく表示されるよう、郵便番号フィールドは短いテキスト型になっています。
「抽出条件をすり抜けてしまいました」とは、具体的にどうなったのでしょうか。
「000-000」というデータが表示されたのか、表示されなかったのか、どちらでしょうか。
Not Like "#######"
なら表示されるのが正常です。こちらでサンプルを作成しましたが、表示されました。
回答ありがとうございました。
ご指導の通りの方法を検討します。
おふたりとも大変分かりやすい説明です、ありがとうございました。
MOS合格できそうです。
人間がコードを記述するときに楽をするための仕様ですね
VBAはコードを記述する際に、高頻度でその用途で使われるモノは省略しても良いとして、様々なモノが省略可能なように作られました
つまり、
Me.
も.Value
も[]
で囲むのも、省略した場合、コードが実行されるタイミングで記述されているとみなしてコードが実行されていますこれらは、省略したとき、意図しない解釈がされてしまう場合には明記する必要があります
例えば「1」という名前のテキストボックスを作成します。これをコード上で記述する場合、単に「
1
」と記述すると、コードの解釈としては数値の「1」を記述したと解釈されますこの記述は常に
a=2
ですこの記述は「
a
に「1という名前のコントロール」の値に「1
」を加えた値を代入する」となりますレコードセットを取得してから重複を削除するのは難しいので、
サブフォームのレコードソースのクエリから、SQLでフィルターと同じ抽出条件を設定して、DISTINCTで重複を排除したレコードセットを取得すると考え方になります。
これはかなりのメリットだと思いますが。これがあるおかげで、コード入力がはかどりますし、タイプミスによるエラーも防げます。
また、Me.があれば、フォーム(レポート)に関連するコントロール、メソッド、プロパティと分かりますので、コードを後から読むときに解読しやすいです。ないと、それ以外の何かの可能性も考慮しつつ読む必要がでてきます。
他の関数などと名前が重複したりすると、バグの原因になりかねません。
Valueはそのオブジェクトが持っている値を取得するプロパティです。
このプロパティはよく使用することが多いので既定のプロパティとされていて、省略することができます。
値を取得したいときは省略してもいいのですが、関数などと名前が重複したりするとバグの原因になったりするので、大きなプロジェクトの場合は、省略しない方がいいと思います。
通常は囲まなくても大丈夫ですが、コントロール名に半角スペースが含まれていたり、VBAのコードとバッティングする記号が含まれていたりするとコントロール名と認識できない場合がありまので、その時は必要になります。
Accessのvbaで処理する方法を探していたんですね。それは気づけませんでした。
以下の記載は参考になるでしょうか。
https://support.microsoft.com/ja-jp/office/sharepoint-にデータをインポート-リンク-または移動する-65bf7b03-74bf-445c-959a-24b7a401ddee
https://naberium.com/2022/07/22/adoを利用してsharepoint-listの一覧を取得する/
↑これはエクセルの場合ですが
以下のように有料のドライバーとしても売ってるので、それなりに難しそうですね。
https://www.cdata.com/jp/kb/tech/sharepoint-odbc-access-linked-tables.rst
すずやんさま 返信ありがとうございます。
手動でパスを取得する方法はわかっています。
access vbaで処理する方法を模索しています。
access側でボタンをクリックするとsharepointのドキュメント内フォルダを
一覧表示するのが目的です。
宜しくお願いいたします。
すずやん様
もしかすれば、Accessも歴史が長く、ハードもソフトも未熟・非力な時に決まった軽量な既定がそのまま遺産になったのかもしれないですね。
ともあれ、ありがとうございました。
んー、なんでしょうね。
「とりあえず実行は許可して結果から判断できるようにする」てのを既定値にしているのかもしれませんね。
じゃないと「OptionDatabase.Execute」の設定や記述がおかしいのか、それとも実行した内容がおかしいのかが判別しにくいから、というのかもしれません。
ヘルプだと同じような RecordsetOptionEnum を持つ OptionDatabase.Execute メソッドの既定値が dbInconsistent らしいんです。
「(既定値) 矛盾した更新を実行します (Microsoft Access ワークスペースのみ)。」
実験してませんが、ソースぐらいしか指定しないと矛盾を許してるんでしょうか。
Executeのほうも、何故既定があえてユルいのか不思議です。
sharepointは使っていませんが、このあたりの方法ではどうでしょうか。
https://begin-prog.site/sharepoint-how-to-get-file-folder-link
ちょっと調べてみましたが、たしかに分からないですね。
希望する動作の値をセットするしかないのかもしれません。
Shift-JISに無い文字を抽出すれば良いのであれば、いったんcsv(sjis)に出力して文字化けさせて
csvを一時テーブルにインポートして元テーブル結合させて絞り込み~じゃダメですかね。
元テーブルに名前以外の主キーがある前提ですが、こんな感じのvbaで。
Public Sub A()
Dim 元テーブル名 As String
Dim 一時テーブル名 As String
Dim 主キー As String
Dim 一時ファイル As String
元テーブル名 = "T_住所録"
一時テーブル名 = "TMP"
主キー = "ID"
一時ファイル = "C:\temp\名前リスト.CSV"
On Error Resume Next
CurrentDb.Execute "drop table " & 一時テーブル名, dbFailOnError
DoCmd.TransferText acExportDelim, , 元テーブル名, 一時ファイル, True
DoCmd.TransferText acImportDelim, , 一時テーブル名, 一時ファイル, True
Dim Qdf As DAO.QueryDef
Dim strSQL As String
strSQL = "SELECT A.氏名 FROM " & 元テーブル名 & " A INNER JOIN " & 一時テーブル名 & " B ON A." & 主キー & "=B." & 主キー & " WHERE INSTR(B.氏名,'?')"
Set Qdf = CurrentDb.CreateQueryDef("文字化けチェッククエリ", strSQL)
CurrentDb.QueryDefs("文字化けチェッククエリ").Sql = strSQL
CurrentDb.QueryDefs.Refresh
Set Qdf = Nothing
DoCmd.OpenQuery "文字化けチェッククエリ"
End Sub
「環境依存文字」という定義が今となっては難しいですね。
はしご高、立つ崎は、現在のUnicode対応のフォントならたいてい普通に表示できると思いますが。
どのようなフォントを使かおうとしているのでしょうか。
ここはチャット型掲示板ではないので、最低でも1日程度はまたないとそもそも網にかかってないのだろうと感じることがありますね
ちょっと前に似たような話題がありました
外字を含むレコードを抽出したい
スマートな方法はありません
りんごさん相対関係は最初作ろうと思ってたのですが内容的にお互い全てが対象となりますので不可なのです。品目はコンボで選択する形になっており、よくあるパターンとして絞り込みは出来る様にしているのです。
品目の相対関係を管理するテーブルを別に作らないの?
まずは、きちんと正規化しておかないと、質問して完成しても、設計が杜撰だから破綻している、捨てて下さいとなるだけですよ。残念ながら。
りんごさん イメージとしてはそんな感じですが、日付や取引先(Nullの場合あり)・伝票番号・その他テキストはメインテーブルにしてます。サブにはA、Bの品目・金額は両方とも入力必要で(相対品目として)、繰越入力の時は説明した通りの決まった切り分けとなります。
要するにこういう事?
りんごさん 財務の振替の様なもので伝票に記入するイメージで直感的にそれに沿った処理フォームにしています。実際は
品目A 金額A 品目B・金額B
あ 1000 繰越 1000
繰越 500 い 500
で金額AとBの合計値は合致させる必要があります。(繰越入力フォーム基のクエリでこうなる様にしてます)
繰越時はA・Bどちらかになるかは決まってますが日々の処理ではどちらかになるかはランダムなのです。
これも説明不足でした(すみません)。
>●処理イメージ(サブ)
品目A 金額A 品目B・金額B
あ 1000
い 500
但し品目のグループにより品目A・金額Aに入るか品目B・金額Bに入るかの切り分けがあります
下記のようにしない理由は?
●処理イメージ(サブ)