トップページ⇒tech
1001コメント375KB

Access使い集合!

■ このスレッドは過去ログ倉庫に格納されています
0001名無しきぼうNGNG
UNIX時間(1970年から秒単位10桁やつ)を
Access or VB で yyyy/mm/dd hh:mm:ss に変換する方法を
教えて下され!
0554デフォルトの名無しさんNGNG
>>553
そりゃCSVのデータ形式から考えればDBに比べて重いのは当然だろう。
0555へたれNGNG
Access2k
サブフォーム(帳票形式)のテキストコントロールのプロパティを
標準モジュールからいじりたいのですが。


sub test()
Forms![親フォーム].[subエリア].[入力数値].DecimalPlaces = 3 ’小数点以下3桁表示
end sub

実行時エラー438
オブジェクトはこのプロパティまたはメソッドをサポートしていません。

となります。

小2時間ほど悩んでます。
サブフォームのコントロールのプロパティを変更するにはどうすればよいのでしょうか?
0556だーNGNG
Forms![親フォーム].[subエリア].[入力数値].DecimalPlaces = 3

じゃなくて

Forms![親フォーム]![subエリア]![入力数値].DecimalPlaces = 3

じゃねえか〜
0557へたれNGNG
サンクス!
できました。感謝感激です。
0558デフォルトの名無しさんNGNG
>553
処理内容にもよるが、直接読んだ方が速いで。
0559デフォルトの名無しさんNGNG
テーブルの項目に半角スペースを登録したいんですが、
いくらやってもNULLになってしまいます。
半角スペースって登録することできないのでしょうか?

まぁ、別の方法考えればいいのですが、
気持ち悪いので質問させていただきました。
0560デフォルトの名無しさんNGNG
>559
テーブルの項目ってフィールド名か?フィールド名を半角スペースで
済ませたいってこと?
それとも、テーブルに直接データ打ちこむと消えてしまうってこと?

テーブル直打ちで半角スペースは打ちこめないよ。クエリか関数はさめばOK
0561デフォルトの名無しさんNGNG
>>560
データですね。
CSVをインポートするときに
「, ,」のデータを読み込ませたらNULLになってしまったので。

関数かクエリー使えばいいんですね。

ありがとうございます。

0562not 560NGNG
>>561
>>560

 話がかみ合ってないような。

 フィールド名を空白にしたい→クエリ使えば?

 CSVの空白データを読み込みたい→," ",としたら?

という2つがすれ違っているような。違う?
0563デフォルトの名無しさんNGNG
>>562
CSVの' 'を読み込んで、データを空白にしたい、ってことです。
フィールド名は関係ありません^^;

混乱させたみたいで申し訳ないです。
0564デフォルトの名無しさんNGNG
>>563
自己レス訂正

' ' → , ,

ですね
0565デフォルトの名無しさんNGNG
>>563
何故にそうしたいのか晒した方がいいのでは…
0566563NGNG
>>565
お客さんから更新データが毎回CSVで来て、それをこちらの
一時テーブル(CSVをそのまま反映するので、本来は日付型やYES/NO型でもすべてテキスト型にしてあります)にセットし、
さらにその一時テーブルをマスタのテーブルにUPDATEするシステムなんですが、
その時に「更新しない項目」の扱いについて検討中なんです。

その時、
,,が一時テーブル入るとNULL → 更新しない。
,文字列,がテーブルに入る → その値で更新

となるんですが、
じゃあ消去したい時はどうすればいいか?って話の時に、
消去したい項目にはスペースを入れるのはどうか?という話になったんです。
ですが、上でも書いたとおり、「, ,」を一時テーブルにインポートするとNULLになってしまうので・・・

ひょとしたらこの仕様時点で大きな過ちを犯してるかもしれないので、
ついでにアドバイスなぞいただけたらありがたいです。

一応現段階としては、スペースは止めて、消去したい項目には、「del」みたいな実データにはありえない文字列をセットして
転送してくれという話になりつつありますが・・・
0567デフォルトの名無しさんNGNG
>>566
> 消去したい項目にはスペースを入れるのはどうか?
これはAccessのテーブル(一時テーブル)にデータが入っているのであれば
当該フィールドが「Is Null」のデータを削除クエリーで消去すればいいのでは…?

CSVをインポート→一時テーブル→削除クエリー

または

CSVファイルをリンク→削除クエリー
0568デフォルトの名無しさんNGNG
あるテーブルの値を、別のテーブルに反映(更新)させる時、
更新クエリを使ってやることができますか?

さっきからやってるんだけどいかんせんうまくいかない・・・
コードにSQLで書いたほうが早いかな?
0569デフォルトの名無しさんNGNG
>>567
ISNULL=TRUEのデータは更新しない項目、つまりマスタの値をそのまま保持するんです。


というか・・・普通更新のシステムってこんなことするんですかね・・・
別所で更新データを生成して、それとは別のシステムに転送して更新させるみたいな。

普通は更新は対象項目をオーバーライトするものだとばかり思っていたんですが・・
0570デフォルトの名無しさんNGNG
>>568
クエリーのテーブル表示に「あるテーブルの値」と「別のテーブル」を表示して
できるけど「あるテーブルの値」が複数ある場合は最後のデータが反映されるようだ

事前に「あるテーブルの値」をクエリーで絞り込んでおくこと…かな?
0571567NGNG
>>569

では、クエリーを使って IsNull=Falseをデータを更新するとか?
0572デフォルトの名無しさんNGNG
>>571
おお、なるほど。
そうすればとりあえずは全角スペースならデータとして埋め込んでくれますね。
ありがとうございます。
0573デフォルトの名無しさんNGNG
NULLとEmpty値の違いがよくわからない・・・

空文字をセットしたい時には、
= NULL とやるか、 = ""
とやるか、どっちがいいんでしょうか?
0574デフォルトの名無しさんNGNG
>>573
ヘルプよりコピー
******
Empty 値は、初期化されていない (初期値が代入されていない) バリアント型の変数を示します。
Empty 値を含むバリアント型の変数は、数値データと共に使われるときは 0、文字列データと共に
使われるときは長さ 0 の文字列 ("") として扱われます。

Empty 値を Null 値と混同しないでください。Null 値は、バリアント型変数に有効なデータが意図
的に格納されていないことを示します。
******

クエリーで抽出条件を「""」や「Null」ばわかると思うが?
0575デフォルトの名無しさんNGNG
アクセスのテーブルをエクセルにエクスポートする方法って無い

一括して全部エクスポートで良いんだけど。
0576デフォルトの名無しさんNGNG
>>575
OfficeLinkが手っ取り早い
マクロにもその手のものがあると思うけど…
0577532NGNG
>>575
576の方法以外に、ファイル−エクスポート。
そんなに大きくなければ、全てのレコードを選択してコピペでもいける。
0578デフォルトの名無しさんNGNG
がんばってVBAコード書くのが一番さ。
0579VBA厨房NGNG
テーブルに登録されているレコードやクエリの結果を
他形式のファイルにエクスポートする時に、Docmdオブジ
ェクトのTransferSpreadsheet,TransferTextメソッド
を使うと保存先ファイル名をフルパスで指定してエクス
ポートする方法しか知らないのですが、

www.interq.or.jp/hot/tsatoh/tryaddress/tryaddress27.htm
のように、ダイアログを表示させて保存させるには
どうしたらいいのでしょうか?
ちなみに上のサイトの方法でやろうとしてもMicrosoft Common
Dialog Contrlが無いのでできないんです。

助けて・・・

0580デフォルトの名無しさんNGNG
>>579
なんかよくわからんけどAPIでGetOpenFileNameA呼べば?
0581デフォルトの名無しさんNGNG
>575
いっとくけど動作保証しないよ。
Public Sub AllTableToExcel()
Dim TD As TableDef

For Each TD In CurrentDb.TableDefs

If TD.Attributes = 0 Then
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel97, TD.Name, "c:\" & TD.Name & ".xls"
End If
Next

MsgBox "------------糸冬 了------------"

End Sub
c:\に沢山できてるでしょ?ダメ?

>579
API公開してるサイトがあるから探してこい。
0582VBA厨房NGNG
>>580
とりあえずコモンダイアログ使わないで
作れました。疲れた・・・
2ch万歳
0583Z80A相当NGNG
ちょっと質問なんですけどAccess のVBAで
今開いてる自分自身のmdbファイルのパスを取得したいんですけど可能でしょうか。
リンクに相対アドレスをつかいたいもので。
解る方いらっしゃいましたらお願いします。
0584デフォルトの名無しさんNGNG
>>583
Private Sub コマンド1_Click()
MsgBox "このファイルのパスは " & CurrentProject.Path & "です。", vbInformation + vbOKOnly, "パス参照"
End Sub

とか?
0585デフォルトの名無しさんNGNG
>>583
ここ ttp://www.ruriplus.com/msaccess/index.asp の
ttp://www.ruriplus.com/msaccess/faq/faq_008.html より

************************************************************
次のユーザー定義関数を作成します。

【7.0, 97】
Function GetCurrMDBDir() As String
Dim db As DATABASE
Dim FullPath As String
Dim ilop As Integer

Set db = CurrentDB()
FullPath = db.Name
For ilop = Len(FullPath) To 1 Step -1
If Mid(FullPath, ilop, 1) = "\" Then Exit For
Next
GetCurrMDBDir = Left(FullPath, ilop)
End Function

【2000 以降】
Function GetCurrMDBDir() As String
Dim db As DATABASE

Set db = CurrentDB()
GetCurrMDBDir = Left(db.Name, Len(db.Name) - Len(CurrentProject.Name))
End Function
**************************************************************
0586Z80A相当NGNG
>584 様、>585様
的確&素早く答えていただいて全くもって助かりました。
ありがとうございました。

0587デフォルトの名無しさんNGNG
ACCESSでWEBデータベースは出来ますか?
会社にWEBサーバーあるんで、そこに置きたい
0588デフォルトの名無しさんNGNG
>>587
イントラネットでなら、できると思われる。
ただ、.netは知らないですわ。2000までの話。


0589デフォルトの名無しさんNGNG
>>587
InterDev経由でならやったことある。
0590しろNGNG
ムカついたのでご報告します。
WindowsXP上でAccess97で作ったDBをAccess2002に変換したところ、
関数の戻り値がおかしくなりました。
ヘルプで検索しても関数ちっとも出てこないし・・・(-_-;)
2000より更にヘルプ使いにくくなりましたね。。

Microsoftに電話したところ、下記のように言われました。

Switch関数、Choose関数の戻り値は、Access2000以降のものを
OSのWindows2000以降のもので使用すると数値で返ってくるはずの
値が全てテキスト型になってしまいます。
Access97ではこの現象はないそうです。

また、Access2000以降でもWindows98等で使用する場合には
正しい型
で返ってくるそうです。
Access2000からの障害ですが未だに治ってないそうです。。。

また、この問題については、Microsoftの英語のサイトにしか記載が
ないそうなので、ご参考までにご報告します。

・・・きっー!!使えないよー(>_<)
0591デフォルトの名無しさんNGNG
うむぅ、どちらの関数も使った事無い...
だが勉強にナターヨ。
0592デフォルトの名無しさんNGNG
Access2002ランタイムで納品している方いらっしゃいますか?
Office97,Office2000またはAccess97,Access2000を混在させたらやはり不具合がでますかね・・・。

Access2002ランタイム単一でいれることにこしたことないのですが
旧バージョンのOffice、Accessと混在させているという経験者がいらっしゃいましたらアドバイスきぼんぬ
 
0593デフォルトの名無しさんNGNG
>>590
おれも使った記憶がないが、有益な情報ありがとう。
0594デフォルトの名無しさんNGNG
>>590
そんな関数使うやついないだろ(ワラ
0595しろNGNG
>591>593>594
え?そうですか?使わない?クエリで条件分岐するような関数は
どうしてますか?そういう事ってやらないですか?
モジュールでは確かに使わないけど・・・。

>592
試験的にやった事はあります。
実行させるショートカットに 
 "パス名 /runtime"
と指定したもので実行させるようにする必要がありますが、
OfficeはともかくAccessが入ってると、動作は微妙に怪しくなるかも
しれないです。
あまり答えになってなくてすみません。
0596デフォルトの名無しさんNGNG
>>595
漏れは、if、Select使った関数自作している。

IIF、swich、Chooseなんて関数、コードの中でも、
どうしても使わざるをえない場合以外使わん。
根本的にキライだからな(ワラ
0597595じゃないけど、、NGNG
IIF、swich、Choose使いまくってました。。。
スマソ。。
0598しろNGNG
>596
私も何度も出てくる関数の時は自作はします。
同じくSwitchやChooseは、コードの中では使った事はないなー。
クエリ内で使うのみです。

>597
>590で書いた問題は、IIFでは発生しないそうです。
検証はしてませんが。クエリ内では私も同じく使いまくってます。
要注意です。
・・・謝る事は無いと思うが?
0599596NGNG
ちなみにD系関数などもつかわん

遅い等も大きな理由だが、最大の理由は
「コードがエレガントではなくなる」
からだ(ワラ
0600デフォルトの名無しさんNGNG
>599
Accessごときにエレガントを求めても・・・
0601592NGNG
>>595
レスありがとうございます。
やはりAccessは共存させないほうがいいみたいですね。

Officeは未だに97使ってる人もいるので心配だったのですが、
この分は気にしなくていいようなので少しホッとしました。
0602デフォルトの名無しさんNGNG
>>599
> ちなみにD系関数などもつかわん
同意。もちろん、使うべきときは使うが。

なんかあったらすぐD系関数つかうやつが多すぎないか?
どういう動作をしているか理解しているのだろうか?
select文でDLookupなんかつかうな。
0603デフォルトの名無しさんNGNG
マ板あたりから房がまぎれこんだらしいな(藁

>600
Accessなんぞ趣味で使うアフォは少ないだろうし、
コードの見栄えを優先してD系使わないってのは
いかがなもんか。
まぁ、>602 の指摘通り、SELECT投げながらDlookUp使う
バカも多いのは確かなんだけどね。
2000程度のテーブルなんか見に行くときはそんなに速度差も
出ないし、ラクでいいと思うが。
0604デフォルトの名無しさんNGNG
accessファイルのパスワードを解除する方法ってあるのでしょうか?
いたずらされてしまって困ってしまいました。
教えてください。
よろしくお願いいたしますm(_ _)m。
0605デフォルトの名無しさんNGNG
>604
ない。諦めれ。
0606デフォルトの名無しさんNGNG
起動時の設定で、ツールバー等を非表示にする、という設定がありますが、
どんなにがんばっても、「メニューバー」残ってしまいます。

システム上でフィルタ機能を使っていると、
このメニューバーでフィルタを解除することができてしまうので、消したいのですが・・・
何か方法はないでしょうか?

ちなみにメニューバーってのは、「ファイル」とか「ウィンドウ」とか「ヘルプ」が
あるバーです。

#一応ヘルプも探したんですけど・・それらしい項目はなかったです。探し方が悪かったかな?
0607しろNGNG
1.メニューバー右クリック → ユーザ設定
 新規作成で、適当な名前を付けた「メニューバー」を作る
(ツールバーじゃありません)
 中味は空っぽでOK!

2.ツール→起動時の設定で、起動時に使用するメニューバーを
 1で作成したものに変更

3.Accessを再起動させた時に、1で作成したメニューバーの小さい奴
 がでてくるので、×で閉じてしまいます。

次回起動する時はメニューバーはないはず。
メニューバーを表示させたいときは、Shiftを押しながら起動!

これでどう?
0608デフォルトの名無しさんNGNG
>>604
あるよ。どこで見たっけなぁ^^;;
参考にならん発言でスマソ
0609デフォルトの名無しさんNGNG
レポートを印刷プレビューで確認したら問題ないのに、
実際に印刷したら、長い文が改行されたり、2ページにまたがったりする。
何故でしょうか?
0610デフォルトの名無しさんNGNG
commandbars("menu bar").enable = false
97でこれやるとALT押したときえらいことになったけど
0611デフォルトの名無しさんNGNG
>604
ビジネスソフト板のAccess総合相談所スレで自分が答えた
ことがある。まずはぐぐってみれ。
パス解析するフリーソフトがあるから。
0612デフォルトの名無しさんNGNG
>>607
できました!ありがとうございます!
0613デフォルトの名無しさんNGNG
Access2000でサブフォームを仕込んだデータシートビューのフォームを、サブフォームを展開した状態で開く方法ってありますでしょうか?
0614デフォルトの名無しさんNGNG
>>609
プリンタドライバ最新にしる!
0615デフォルトの名無しさんNGNG
>>609
プリンタをドライバで最新にしる!
0616helpNGNG
Access2000・Windows2000
Accessを起動したときにいきなり予め作成されているクエリのデザイン画面を起動したいですがAccess・VBAでクエリをデザイン画面で開くことはできますか?

0617デフォルトの名無しさんNGNG
DoCmd.OpenQuery "xxxx" ,acViewDesign
0618helpNGNG
≫617
ありがとうございます。
DoCmdオブジェクトを使用すれば、大概のアクセス昨日をVBAで実行できるんですね。
参考になりました。
0619maiNGNG
フォームにリストボックスをつくり、
自オブジェクトのクエリ名の一覧を表示したいのですが。
可能ですか?
可能の場合その方法または参考URLを教えていただきたいのですが
よろしくお願いします。
0620デフォルトの名無しさんNGNG
>>619
Currentdb.QueryDefsをFor〜Eachあたりで回して.Nameプロパティを参照。
あとはリストボックスのRowSourceに区切りを追加したテキストとしてつっこめばok。
ある程度数が増えると入りきらないんで、そんときはなんとかしたほうがいい。
0621デフォルトの名無しさんNGNG
>619
620 のついでに言うとRowSource には制限があり、2024Kbyte。
文字列として処理をされるから、クエリオブジェクトが恐ろしく
膨大にあるのであれば、パンクを防ぐために、一工夫が必要になるね。

# まー、そこまで増える場合は設計見直すのが先決だな
0622デフォルトの名無しさんNGNG
>>619
つーか、クエリオブジェクトの一覧表示して、何がしたいかでこの先が決まってくると思う。
0623maiNGNG
≫620、621、622
ありがとうございます。
リストボックスより実行するクエリを指定してもらい
選択したクエリの実行結果を別フォームのサブフォームとして表示するように
したかったのですが。
2024kbまでいかないとおもいますので、検討してみます。
0624621NGNG
>623
ごめん、すげー鬱氏。

>2024kbまでいかないとおもいますので
2024Kbyteってありえんわな、2kの間違い。

鬱氏ついでに、カンタンなアドバイス。

If Lenb(Strconv(〜.RowSource,vbFromunicode))<2024 Then

こんな具合でちゃんとエラートラップしとけ。
0625maiNGNG
≫
ありがとうございます。
やはり無理っぽいですね。
クエリとAceessエクスポート機能をじかに使ってもらうかたちで逃げようと思います
0626デフォルトの名無しさんNGNG
あん?
適当なローカルテーブルにクエリ一覧を出力すればいいんでねーの?
0627maiNGNG
選択したクエリの実行結果を別フォームのサブフォームとして表示し、
エクスポートボタン(コントロール)をおすと特定のファイルにエクセル形式で検索結果と別シートにクエリ条件エクスポートするようにしたかったのですが…
私の知識では、ちょっと思いつかないので。
0628しろNGNG
>627 maiさん
DAOは出来ますか?
コンテナオブジェクトを使って、クエリ名をDAOでテーブルに
書き出せばできますよ。

そのテーブルをリストボックス等に使えばいいです。

Containerオブジェクトのサンプル
--------------------------------------
'テーブル、クエリ名を順番にメッセージボックス表示します。

Dim Db As Database, ContMy As Container
Dim MyDoc As Document, strName As String

Set Db = CurrentDb()
Set ContMy = Db.Containers("Tables")

For Each MyDoc In ContMy.Documents

 strName = MyDoc.Container 'オブジェクトタイプ
 strName = strName & " " & MyDoc.Name 'オブジェクト名

 If MyDoc.Name Like "*MSys*" Then
 Else
  MsgBox strName
 End If

Next MyDoc

Set ContMy = Nothing
Set Db = Nothing
-------------------------------------
※テストする場合は、スペースが入ってるので消してください。
0629maiNGNG
>>628
ありがとうございます。
これにリストボックスに追加ロジックを埋め込めば想像通りの処理が出来そうです。
大変感謝しております。私の実力不足ですね。
DAO関連を学習するURL等おしえていただければ幸です。
よろしくおねがいします。
0630デフォルトの名無しさんNGNG
今クエリを使って計算や判定などをやろうと思っているのですが・・・

クエリ内での同一レコードの合計や平均の算出、
cLngなどを使った型変換、IIFでの判定、
等、本来コードでもできることってありますよね。
こういうのってクエリでやってもいいものなんでしょうか?
(結果はちゃんと出ています。パフォーマンスとか、テクニック上の問題で)

合計や平均なんかはいいけど、型変換はあまりよろしくない。等、
皆さんの意見を聞かせてください。
0631デフォルトの名無しさんNGNG
>>630
クエリ内でやるほうが普通はパフォーマンスはいいでしょ。
クエリにもよると思いますが
0632デフォルトの名無しさんNGNG
>630
動いているならヨシだ!

パフォに関していえば、キャストが頻繁にあったりすると多少落ちる。
更に、IIFやSwitchなんか酷使してると最悪。あとで見直すときとか、
他人が見たときは悲惨、見たくもなくなる。
IIF使わないといけないってクエリは大体設計がおかしい、経験上。
0633デフォルトの名無しさんNGNG
単純な集計なら速い・楽でいいけどね。
IIFを多重に使われたりすると保守で死にそう。
ユーザ定義関数をうまく使ってくれたほうがマシ。
0634630NGNG
早速の回答ありがとうデス。
IIFに冠しては自分もいい噂聞かなかったのですが、
クエリでの計算フィールドで、既存の項目のNULLによって●を出力する、
ということを急にしなければならなかったので、結局IIFを使いました。
(自分では、IIFってのはEXCELでのIF関数みたいなものだと思っている)
まぁIIF使ったのはこんだけです。

とりあえず今回はこのまま進めちゃいます。
社内システムだし(笑

引き続き意見があったらお願いします。
0635デフォルトの名無しさんNGNG
保守面倒だからってタブー視するこたないと思う。
使った方が早いと思ったら使えばいいし。
そもそもAccessを使う、っていう選択自体が工数削減を目的としたものだろうし。
0636デフォルトの名無しさんNGNG
>634
それくらいの用途なら使っても問題無しだ。
0637yukiNGNG
cl/sv Access+Oracle oo4o接続 OS共にwin2000
のシステム開発をおこなうのですが、
oo4o関連の参考図書として、情報量が豊富なものと初心者向けのものメジャーなものを教えていただきたいのですが。
よろしくお願いします。
0638デフォルトの名無しさんNGNG
たとえばPCの管理で
メインテーブル:id(オートナンバー型)、管理番号、PC名、その他フィールド
ソフトウェアのライセンステーブル:ソフトウェアの名前,id(長整数型)

という構成でフォーム(ソースはメインテーブル、サブフォームに
メインテーブルのidに対応したソフトウェアの表示)からDAOを使って
データベース操作をする時、一つ前の更新情報を履歴としてメインの
テーブルに残すために
管理番号はそのままでidだけ変更してメインのテーブルにレコードを
追加したいのですが、idがオートナンバーなので、それに対応した
サブフォームの表示ができないんです。

助けて…
0639デフォルトの名無しさんNGNG
>>638
オートナンバーなんかやめればいいじゃん
0640VBA厨房NGNG
>>627
これ?
http://support.microsoft.com/default.aspx?scid=%2Fisapi%2Fgomscom%2Easp%3Ftarget%3D%2Fjapan%2Fsupport%2Fkb%2Farticles%2Fjp404%2F9%2F11%2Easp&LN=JA
0641maiNGNG
>>640
ありがとうございます
この方法は一度検討したのですが、
Access2000の場合、書式を設定しないと文字化けしてしまうし、
特定セルに出力できないためあきらめました。
0642しろNGNG
>640 maiさん
エクスポートは文字化けしたりする事は多いですし、
シートを選んでエクスポートしたり、特定のセルを選んだりしたいなら、
AccessからExcelのVBAを操作して指定してやる必要があります。

>628 
DAOについてですが、簡単に検索してみましたが初級用のサイトで
よさそうなのは中々見つけられませんでした。

ちなみに私の場合、DAOはA4サイズの薄っぺらい「AccessVBA上級」?とか
「Access応用」?とかそんな名前の本で勉強しました。
今手元に無いので出版社とか判らないのですが、PC関係の本が多めに
置いてある書店の端っこの方に置いてあると思います。
(といってもこの本がオススメと言うわけではないですが・・・(^_^;))

ご参考まで。
0643デフォルトの名無しさんNGNG
レポートに配置されたのテキストコントロールに連結されているデータを
コード部分で”何も入っていない”と判断する式はこれだとまずいのでしょうか?
どうもうまくいかなくて困っています。

If Me![*****] = Null Then
line1.Visible = False
txt1.Visible = False
End If

プロシージャはFormat部分にコードを書いてます。
0644デフォルトの名無しさんNGNG
>643
Nullは値と思いがちなんだが、Accessが評価してない値の「状態」だ。
比較するには値が確定してないと結論が出せないのはわかるだろ。

だから、Nullであることを確認したいときにはIs系関数を使ってみれ。
If IsNull(Me![*****]) Then
 ・・・・・
0645デフォルトの名無しさんNGNG
>644
nullは値ではなく状態なのですね・・・。
だからイコールで結ぶのではなくIsNullで値を確定する、と・・・なるほど

ありがとうございます!感謝!!
0646デフォルトの名無しさんNGNG
ちなみに、Isnull("")の結果はFalse。
オレはいつも
If Isnull(Me.小林) or Me.小林="" Then
ってかたちで判定してる。
0647デフォルトの名無しさんNGNG
If Nz(txtTest) = "" Then
じゃダメか。
0648しろNGNG
>646 同じく
If Isnull(Me.小林) or Me.小林="" Then
とやってますが、最近は
If Isnull(Me.小林) or Len(Me.小林)=0 Then
にしてます。
Me.小林=""
と言う文字列の判定より
Len(Me.小林)=0
の方が処理が早いと何処かにかいてあったので・・・。
0649デフォルトの名無しさんNGNG
>>646 >>648
Me.小林を二つ書くくらいなら関数にしろよ。
0650647NGNG
いやだからNzじゃだめ?
0651しろNGNG
>649
質問ですが、例えばこのような書き方をする場所が一度しかなくても
関数にしてます?
どの程度の使用頻度で関数にするとか決めてます??
実行速度とか、保守の面とかではどうなんでしょう?
ご参考までに教えていただけると嬉しいです。
0652しろNGNG
>647
この場合ではNzは使った事無いな。特に問題はないですか?
無いなら便利そうだから使ってみようと思うけど・・・。
0653646NGNG
>>649
自分で使うときは関数にしてるよ。
方法の提示ということで開いて書いたんだが。
■ このスレッドは過去ログ倉庫に格納されています