1read 100read
2011年10月1期ビジネスsoftAccess2000+SQL Server難しい・・・(´д`;)
TOP カテ一覧 スレ一覧 削除依頼 ▼
・ 次のスレ
PageMaker7.0J **CADアーキトレンド** EXCEL,ACCESSで曖昧な表現を。
Access2000+SQL Server難しい・・・(´д`;)
1 :01/10/03 〜 最終レス :11/01/01 今までACCESSのみでフォームやレポートを作成するときワーク テーブルを作成しそれをレコードソースとして作成していました。 しかし、ADOではクライアントにワークテーブルを作成する事が できないですよね。 皆さんはこの辺をどういう方法で処理していますか? 本によるとストアドプロシジャーを使って対応できるとか書いてあり ますがいまいち方法はわかりません。
2 : 私もこれ やりかた探してるんですが・・・ Transact-SQLのヘルプで CREATE TABLE ってあるんですが、ここに「一時テーブル」っていうのがあるんです。 クライアント側に作るんじゃないけれど 同じような使い方ができそうなんですけれど・・・ ストアドの中で作ってその間だけしか使えないと プログラム全体(フォームとか)をストアドの中で 呼ばないと使えないのかな? とか・・・ よくわからないのです。 ヘルプの意味もよくわからない・・・ (/_;) どなたか詳しい方いらしたら教えてください!! わたしからも よろしくお願いします!! m(u_u)m
3 : クライアントにワークのmdb作るだけじゃないのか? ado接続もできるんだし。
4 : あれ? 私は1の方の書いてる意味を 勘違いしてたみたいです。 ワークテーブルってテンポラリーのテーブル=一時テーブルのことだと思っちゃいました。 スミマセン 自分が一時テーブル使いたくて探してたもので「同じ質問の人がいる〜」って 思ってしまいました。 こちらも ご存知でしたら 教えてください、お願いします。
5 : >>1 フォームのレコードソースにするだけならビューを使えばいいのでは。 またはSQL文を直接レコードソースにいれれば。 >テンポラリーのテーブル=一時テーブル って何のために??フォームをストアドで呼ぶというのもよくわからん。 ストアドはデータベース側で動くもので、 クライアントはコマンドとパラメータを渡すだけだよ。 何がやりたいかを書けばレス付くのでは?
6 : >>2 一時テーブルはクライアントがDBを閉じるまで有効だったと思います。 ストアドの実行方法を理解されてることを前提に書きます。 SELECT ・・・ INTO ##テーブル FROM テーブル WHERE 1 = 2 とか CREATE TABLE ##テーブル (・・・) とかで、とにかく'##'の付いたテーブルを作ると一時テーブルができるわけで、 ##テーブルをフォームのレコードソースにできます。 ストアドの中でデータ作って参照だけならそれだけでいいけど、 フォームでデータを編集する場合、主キーが必要だったように思います。 ALTER TABLE ##テーブル ADD CONSTRAINT PK_テーブル PRIMARY KEY (キー) って感じで主キーを作ります。 フォーム閉じる時は一時テーブルを消さないといけませんね。 DROP TABLE ##テーブル 間違ってたらスマン
7 : 早速たくさんの人たちに書きこんで頂いて喜んでおります。 >>2 多分、同じ悩みだと思いますので問題解決にご協力をお願いします。 >>3 現在の開発環境はAccess2000を.adpで作成し使用しています。.adpで使用すると 接続できるデーターベースはSQL Serverのみでクライアントにワークテーブルも 作れないし、他のmdbとも接続できないようなのです。 ここが間違いで何かの方法があれば教えて頂きたいのです。 今日から、Accessを.mdbで作成し、SQL Serverのデータをodbc接続してDAOで 開発しようかなーとも思っています。 >>5 例えば、フォームのレコードソースにビューやSQL文をいれて使用した時、同じ フォームを別のパソコンでも開いたときに問題が生じるという事はないのでしょ うか?まだ、実験まで至ってなく頭の中で考えて多分問題が起きるのではないか と迷っています。 フォームをストアドで呼ぶという事の質問なのですが、ストアドのレコードセット をフォームやレポートにいれて使用できる。みたいな事が書いてあるのですが、 この方法が理解できないし、他のパソコンでも同じストアドを使用されたときに 問題がおきるのではないかと思うのです。 >>6 この時、テーブルはクライアントに出来るのでしょうか? もし、サーバー側に出来たとした場合、他のパソコンでも同じ処理をしたときに 同じテーブル名が作成され問題を生じるという事はないのでしょうか? Accessでは実績があるのですが、SQL Serverは今回が初めてで困っています。 最初からACCESS2000を.adp(プロジェクト)+SQL Server2000と書くべきでした 納期が迫っているので今回は.mdb+SQL Server2000で行こうと思います。 ただ、この件は解決方法を見つけたいと思っていますので、チョットしたきっかけ でもいいですので今後とも宜しくお願いします。
8 : >>1 一時テーブルはサーバー側に出来ます。 クライアント毎に作成され、他のクライアントからは見えません。 同じテーブル名の問題はありません。 >>6 の方法は、私は明細型の伝票入力等で使っています。 ・フォームオープン前にストアドで一時テーブル作成 ・伝票修正・削除の場合はストアドで該当レコードを一時テーブルに転送 ・連結型の帳票フォームオープン(サブフォームだったりします) ・明細編集後の決定ボタンのアクションで明細テーブル更新処理のストアドを実行 ・フォームクローズ時に一時テーブル削除 といった感じです。 mdbは分散型アプリケーションで、adpはホスト集中型アプリケーションの ような感じですかね。 adpで大量のレコードを処理する場合に、ローカルマシンでやるような VBAだけでの処理なんてことをさせると、ネットワークに負担を掛けて しまいますので、少々面倒ですが適切にストアドを使う必要があります。 adp+SQLはmdb+SQLに比べてテーブルのオープン等の処理が速いように 思います。 ついでに、 ストアドをフォームやレポートのレコードソースにする場合、 Alter Procedure ストアド ( @パラメータ1 nvarchar(10), @パラメータ2 nvarchar(10) ) As SET NOCOUNT ON CREATE TABLE ##テーブル (・・・) <処理> SET NOCOUNT OFF SELECT ・・・ FROM ##テーブル ・・・ ORDER BY ・・・ DROP TABLE ##テーブル といったストアドを書き、フォームやレポートの入力パラメータプロパティに、 @パラメータ1 nvarchar(10) = [Forms].[フォーム]![パラメータ1], @パラメータ2 nvarchar(10) = [Forms].[フォーム]![パラメータ2] のような設定をします。 他のパソコンで同じストアドを使用しても問題は起きません。
9 : ここなんてどう? 参考になると思う。 http://www2p.biglobe.ne.jp/~sakurait/cstrue/cl1999/cl1999c4.html
10 : 6番さん、9番さん、ありがとうございます。 >>8 「mdbは分散型アプリケーション adpはホスト集中型アプリケーション」って素晴らしい表現ですね。 サーバー側で作成する一時テーブルは名前が同じでも他のクライアントには全く 関係無い。という事、これで納得し安心しました。 クライアントの台数が多くなるとサーバーに負担が掛かるのでサーバーの負担を 軽くする意味でクライアントにワークテーブルを作成した方がいいのではないかと 思っていましたが、この考えだと逆にネットワークに負担がかかり遅くなるんです ね。なるほど良くわかりました。 サンプルで記述されたストアドもこれから時間をさいて実験してみます。 結果はまたご連絡致します。 >>9 ここも凄く役にたちました。探している時は中々見つける事が出来ないけど、 素晴らしい情報ってたくさんありますね。 2ちゃんねるって凄いですね。みなさんに感謝感激です。 これからも宜しくお願い致します。
11 : 3がとても正しいと思う今日この頃なのでした
12 : >>11 11番さん、こんにちは、 adoとmdbを一緒に使えるのでしょうか? お忙しいと思いますのでヒントでも結構です。宜しくお願い致します。
13 : >>8 サーバーでテーブルを作ったり削除したりして サーバーの負荷は重くならないのでしょうか? またSQLサーバーのばあい データエリアがフラグメントしたりしないのでしょうか?
14 : >>13 自己流なので、間違ったことを書くかも知れませんが >サーバーでテーブルを作ったり削除したりして >サーバーの負荷は重くならないのでしょうか? 参考書を読んだことがないので何とも言えませんが、 一時テーブルはこのような使い方をするために あるのだと思っています。 どうしても一時テーブルが必要な場合があります。 SELECTだけで出来ることであれば、なるべく避けた方が いいのでしょう。 最近納品したアプリケーションは8台のクライアントで 使ってますが、遅いと感じたことはありません。 クライアントやネットワークのトラブルで処理が中断 した場合に、勝手にリカバリ(削除)してくれるので、 便利です。 ローカルのmdbにアクセス中、クライアントがダウンすると、 どの様なトラブルになるか、予想がつきません。 WINDOWSを使ってる限り、クライアントがいつダウンするか 分からない、突然ネットワークが切断される場合があるという ことを考慮して、アプリケーションを作るべきだと思います。 でないと、頻繁ユーザーに呼ばれ、にトラブル対応することに なりますからね。 >またSQLサーバーのばあい >データエリアがフラグメントしたりしないのでしょうか? ACCESSと違って、勝手に最適化してくれてるようです。
15 : sqlで作成した方がいいお勧めの本は ナツメ社のaccess2000sqlハンドブック
16 : >ACCESSと違って、勝手に最適化してくれてるようです それに、一時テーブルはtmpdbに作成されるから、直接ユーザのDBには影響しないしね。
17 : >>14 皆様のおかげでSQL Serverの良い所やプログラミングする時の注意点等が 少しづつ分かってきました。ありがとうございます。 実をいいますと、前回、教えて頂いたストアドプロシージャでのフォーム の作成がまだ理解出来ていないのです。 CREATE TABLE #テーブル を使用するとテーブルの定義が面倒みたいなので SELECT INTO #テーブルが簡単でいいかなと思いこの方法を実験しているの ですがなかなか難しいですね。 ・フォームを開くとき SELECT INTO #テーブルを使用して一時テーブルを作成する。 作成されたテーブル名をフォームのレコードソースに代入する ・データの入力、編集などを行う。 ・登録で#テーブルからサーバー側のデータを更新する ・フォームを閉じる 一時テーブルを削除する この様な考えなのですが、大丈夫でしょうか?もし、考えが間違っていたら 教えて下さい。宜しくお願い致します。
18 : >>1 ほぼ大丈夫だと思います。 私も行き当たりばったりでやってますので、なんとも言えません。 とりあえず、フォームでテンポラリを参照するところから 始めてはどうでしょう? (もうこの辺は理解されてるかもしれませんが・・・) 1.ストアドを2つ作る −−−−−−−−−−−−−−−−−−−−−−−−−−−−−− Alter Procedure TEST_テンポラリ作成 As --とりあえずテーブルをデータ毎コピー SELECT * INTO ##テンポラリテーブル FROM test1 --テストに使うテーブル名 return −−−−−−−−−−−−−−−−−−−−−−−−−−−−−− Alter Procedure TEST_テンポラリ削除 As DROP TABLE ##テンポラリテーブル return −−−−−−−−−−−−−−−−−−−−−−−−−−−−−− 2.新規フォームを作成する (作成を始める前に TEST_テンポラリ作成 を実行して一時テーブルを作っておいて下さい) コントロールソースプロパティを ##テンポラリテーブル と設定する。 後はACCESSと同じ要領でテキストボックスをいくつか作って下さい。 (フォームを閉じた後は TEST_テンポラリ削除 を実行して一時テーブルを削除して下さい) 3.テスト TEST_テンポラリ作成 実行 フォームを開く TEST_テンポラリ削除 実行 で、これらの動きが見えると思います。 レコードが編集できないことも確認出来るかと思います。 それから、データ編集する仕組みにも挑戦してみて下さい。 一時テーブル作成時に主キーを作ることをお忘れなく>>6 データ編集で私がよく忘れてしまうのは、フォームでの編集では、レコード移動時に レコードがテーブルに書き込まれるため、最後に編集したレコードがテーブルに 反映されないままストアドを実行させてしまうことです。(ACCESSでも同じですね) ストアド実行前にレコードを保存することをお忘れなく。 DoCmd.RunCommand acCmdSaveRecord だったかな。 頑張って下さい。
19 : >>6 TESTテンポラリー作成について質問なのですが 1.RecordSource = "#TEST" RecordSource = "##TEST" #TESTで実験した場合、テーブルが無いとメッセージが出ます。 これはどうしてでしょか? 2.表形式のフォームに##TESTを張りつけたとき、データは正常に表示されるので すが、最終行に空白が空かないため追加データの入力が出来ません。 TESTにはインデックスはセットしているのですが何が問題なのでしょうか? >>18 で「レコードが編集できないことも確認出来るかと思います。」と説明し てある事がこの事でしょうか? お忙しいのに申し訳ございませんが、教えて頂けないでしょうか?
20 : だれかSQLserver2000のCDキーを教えて下さい!! 明日までにわからないとぼくはもうダメなんです!!!
21 : WR-W50292-M1G9M52-UA107
22 : >>19 SELECT INTO ##TESTで一時テーブルを作成した場合の件ですが 元となるテーブルにインデックスがセットしてあれば##TESTにも自動的に インデックスがセットされると思っていました。これが間違いだったのですね。 CREATE TABLE でインデックスも含めて##TESTで一時テーブルを作成し その後、INSERT INTOでデータを代入して一時テーブルを作成したらうまく行きま した。 SQL ServerはAccessに比べて機能が多いのでマニュアルがとても見にくいですね シンプルなサンプルがたくさんあるといいと思います みなさん、今後とも宜しくお願い致します。
23 : SQL ServerにTM_GYOといううマスタがあります。 ACCESS2000の表形式のフォームで、TM_GYOのデータを追加、修正、削除等が出来るようにしたいのです。 下記のような方法で、登録、修正、削除など行えるようになりました。 しかし、下記の問題が発生しました。 1.#TN_GYO では一時テーブルが作成できない。 2.同時にほかのパソコンで同じフォームを開くと##TN_GYOが既に存在します。になります。 3.マニュアルには 『ローカル一時テーブルが、複数ユーザーが同時に実行できるストアドプロシージャ またはアプリケーションで作成される場合、SQL Server は、異なるユーザーが作成 する個々のテーブルを区別できなければなりません。SQL Server は、各ローカル 一時テーブル名の末尾に数値サフィックスを内部的に追加することによって、テーブル を区別します。』 と書いてありますが、数値サフィックスは自動的に作成されるものではないのでしょうか? ACCESSのフォームを開くのイベント内 Set COMD.ActiveConnection = CN01 With COMD .CommandText = "ST_3010TMPSKS" .CommandType = adCmdStoredProc .Execute End With RecordSource = "##TN_GYO" ストアドプロシージャー Alter Procedure ST_3010TMPSKS As CREATE TABLE ##TN_GYO (GYO01 NCHAR(2) NOT NULL,GYO02 NCHAR(16),GYO03 NCHAR(2),GYO04 NCHAR(2),GYO99 INTEGER) ALTER TABLE ##TN_GYO ADD CONSTRAINT TN_GYOK01 PRIMARY KEY(GYO01) INSERT INTO ##TN_GYO (GYO01,GYO02,GYO03,GYO04,GYO99) SELECT TM_GYO.GYO01,TM_GYO.GYO02,TM_GYO.GYO03,TM_GYO.GYO04,0 FROM TM_GYO return 宜しくお願い致します。
24 : >>23 >2.同時にほかのパソコンで同じフォームを開くと##TN_GYOが既に存在します。になります。 確かにそうですね。 何かで読んだのと、他のシステムの経験によって、一時テーブルについて間違った 思い込みをしてました。 申し訳有りません。 1さんのレスを読んで、ユーザーで実験し、脂汗をかいております。 クライアントの多くが遠隔地にあり、エラーが起きても知らせて来なかったのかもしれません。 明日は、この対応になりそうです。 一時テーブル名をユニークにするにはどうすればいいのかは、いくつか思いつきはしますが、 このような場合の「定石」を知りたいと思います。 私の作ったアプリケーションでは、一時テーブルはトランザクション内で作成・削除を行ってますが、 同時に同じトランザクションが実行された場合の「排他制御」の考え方についても知りたいと思います。 どなたかご指導、宜しくお願いします。
25 : テーブル名のおしりにHOST_NAME()、つまりコンピュータ名を入れればいい。 動的SQL(SQL文をSQLで作って実行)は少々面倒だけど。
26 : >>25 とても勉強になりました。 ホストネームがこんなに簡単に取得できるとは知りませんでした。 有り難うございます。 Alter Procedure TEST_テンポラリ作成 @file_name nvarchar(128) OUTPUT As SET @file_name = '##テンポラリテーブル_' + HOST_NAME() EXEC ('SELECT * INTO ' + @file_name + ' FROM test1') return Alter Procedure TEST_テンポラリ削除 As DECLARE @file_name nvarchar(128) SET @file_name = '##テンポラリテーブル_' + HOST_NAME() EXEC ('DROP TABLE ' + @file_name) return <開く時> Private Sub Form_Open(Cancel As Integer) Dim Cnn As ADODB.Connection Dim Cmd As New ADODB.Command Dim par As ADODB.Parameter Set Cnn = CurrentProject.Connection Cmd.ActiveConnection = Cnn Cmd.CommandText = "TEST_テンポラリ作成" Cmd.CommandType = adCmdStoredProc Set par = Cmd.CreateParameter(, adVarWChar, adParamOutput, 128) Cmd.Parameters.Append par Cmd.Execute Me.RecordSource = par.Value End Sub <閉じる時> Private Sub Form_Close() DoCmd.RunSQL ("TEST_テンポラリ削除") End Sub
27 : >>25 マニュアルに「数値サフィックス」とは書いてありましたが、「HOST_NAME()」に ついては見つける事ができませんでした。 どうもありがとうございます。 >>6 詳しくサンプルまで書いて頂いて助かります。 どうもありがとうございます。 皆さん、遅くまで頑張ってらっしゃるんですね。関心します。 体には充分注意して下さいね。 これから早速、実験してみます。今後とも宜しくお願い致します。
28 : 揚げ
29 : #2つだとグローバル一時テーブルになるから #1つでやらないと駄目なんじゃなかった?
30 : #1つだと、ストアド終了時に消えてしまったと思う。 #2つだとグローバルだけど消えないから、あとはテーブル名を端末毎にユニークな名前を付けておけば区別できるという話。
31 : 皆様すごくて ついていけていませんでした・・・ やっと 試してみまして、気が付いた事がひとつあったので ご報告します。 ホストネームに'-'を使用しているPCがあると 一時ファイル作成時に ファイル名のエラーになるようです。
32 : >>31 それならホスト名をQUOTENAME関数で変換した結果をテーブル名にすればいい。
33 : 32>> QUOTENAME関数・・・ですか? 調べて明日試してみます。 ありがとうございました!! m(u_u)m
34 : >>31 [ ]で囲むと良い
35 : >>32 別な問題が発生してしまって 試せていません。 せっかく教えていただいたのに申し訳ありません。 >>34 []ですか… ##の後ろを囲んでも大丈夫なのかな?##も含めるのかな?? やってみます。 って言いながらまた時間かかりそう(泣 ところで、皆様 MSDEのバックアップってどうなさっていますか? ACCESS2000との組み合わせだと ツール>データベースユーティリティー>バックアップ ってありますが これだと別のサーバとかコンピュータに取っておけるのですが、 文字通り「元に戻す」しか出来なくて、1テーブルだけ戻すとか出来ないですよね? MSDEのデータ変換サービスウィザードを使うと テーブル単位にバックアップ取れるけどMSDE自体が 同一のものだから(?) 別のサーバにバックアップを取る事が出来ません。 (MSDEのインストール時に作られる「Data」っていうフォルダに××.ldfと××.mdfっていう 2つのファイルが出来てしまい、結局同じMSDE内に出来てるって事かな?と解釈したのですが…違うでしょうか?) いろいろ試したのですが、どれも 今ひとつでした。 @テーブル単位に戻すことが出来て、 A安全の為に別のサーバ(別のMSDE)に、 B元のadpファイルに戻すだけでなく 他の場所、他のadpファイルに、 Cできれば ビューやストアドも といったことが出来るようなバックアップの取り方&戻し方ご存知の方いらっしゃいましたら 教えてください。 よろしくお願いします。m(u_u)m
36 : >>35 ボクもMSDEのバックアップについてちゃんと勉強したいと思っていますが、 今やってる方法を書きます。 ユーザーにツールバーのバックアップを操作させるのは危険なので、 バックアップ用のフォームからストアドを実行してもらっています。 ちなみにストアドは、 Alter Procedure バックアップ @file_name nvarchar(200) As BACKUP DATABASE XXXX TO DISK = @file_name return です。 バックアップ用のホルダーにバックアップファイルを作り、手動でバックアップ メディアにコピーしてもらっています。 リストアは「元に戻す」でやっています。(ユーザーがリストアすることはありません) 「元に戻す」は、現在接続中のデーターベースに上書きするようです。 既存のデーターベースを残したまま、新たにテスト環境を作りたい場合は、 ウィザードの「プロジェクト(新しいデータベース)」で別のデータベースを作り、 出来上がったADP(運用中のADPでは接続先を変更して)から「元に戻す」で リストアしています。 バックアップ先デバイスと違うフォーマットのデバイスへのリストアは出来ないので、 あらかじめCD-ROM等からハードディスクにコピーしてリストアしています。 ボクのユーザーのデータベースはそれほど大きくないので丸ごとコピーで 自宅に持って帰っていますが、大きい場合はテーブル持ち帰り用のデーターベースを 作った方がいいのでしょうね。 >@テーブル単位に戻すことが出来て、 データベース間のコピーペーストで (キーの情報はコピーされない・・・中途半端ですね) >A安全の為に別のサーバ(別のMSDE)に、 >B元のadpファイルに戻すだけでなく 他の場所、他のadpファイルに、 adpファイルを作ることによってデータベースが出来上がりますが、 adpファイルとMSDEのデータベースは独立したものです。 ××.ldfと××.mdfがデータベースの実体ですが、そのファイルを 意識することはないでしょう。 前の方に書いた方法で出来ます。 >Cできれば ビューやストアドも ビューはコピーペースト出来ないのでSQL文を表示させて手動コピー (MSの手抜きですかね・・・) ストアドはコピーペースト出来ないのでテキストを手動コピー (これもMSの手抜きですかね・・・) もっといい方法がありましたら、どなたかご指導お願いします。
37 : ADOレコードセットとテキストボックス等を連結してUPDATEメソッドで更新する方法無いですか? フォームのレコードセットに指定すると元データも更新されてしまいます。 関数作って地道に更新するしかないですか?
38 : >>37 関数作って地道に更新するしかないでしょうね やはり非連結フォームですよね コピーしたいコントロール名を、 Link_商品コード Link_商品名 の様な名前にして、Link_の付いたコントロールをADOレコードセットから 全てコピーする関数を書けば、少しは楽になるのかも 他でも使えるし コントロールからADOレコードセットへも同じ方法で 念のため、 コントロールの数 Forms(フォーム).Count コントロール名 Forms(フォーム).Controls(数値).ControlName
39 : データを登録しようとすると、『 エラー 3146: ODBC--呼び出しが失敗しました。』 というエラーメッセージが出るのですが、原因がわかりません。 どのような場合に、このようなエラーメッセージが表示されるのかを、 ご存知の方がいらっしゃいましたら、どうかヒントをよろしくお願いします。
40 : >1 mdbに慣れていて、クライアントがAccess限定ならローカル一時テーブルの作成は クライアントマシンにワーク用のmdb作って ADO(DAO)でRecordsetオブジェクトをグローバル変数に取得 Form_Loadの時にrecordsourceプロパティに取得したオブジェクトを設定でもいけます。 SQLのほうでテーブル名の問題が出るよりは楽だとおもうんだけどどうかな?
41 : 勉強になるな
42 : >>15 の >sqlで作成した方がいいお勧めの本は >ナツメ社のaccess2000sqlハンドブック とはどれでなんだろう? http://www.natsume.co.jp/Natsume/PC.html
43 : あげ
44 : Access+SQLServer でいろいろ実験してるんだが・・・ なんかいい書籍とかないのかなぁ〜
45 : MSのサイトに落ちてますよ。 http://www.microsoft.com/JAPAN/sql/evaluation/exercises.asp 只だし。これでだめならこれよりやさしそうなものを立ち読みしてから買おう。
46 : >>45 ありがとう! さっそく見てみます!
47 : 良スレage
48 : 保守
49 : あげ
50 : >>30 >#1つだと、ストアド終了時に消えてしまったと思う。 ストアドを使っているのが間違い。 ExecuteでSQL文をサーバーに投入すれば良いのでは
51 : はじめてSQLServer2000とフロントエンドAccess97でシステムを構築します。 サーバーとクライアント間は64kbps専用線を使います。 しかしテストをしたところ、サブフォームつきのフォームで、レコードの読みこみに 時間がかかることがわかりました。 テストデータは親側30レコード、子側で平均各10レコード(合計300レコード) フォームを開くのに5秒、更新・レコード移動に2秒ほどです。 1)Access2000 or 2002にするだけでもパフォーマンスが改善されますか? 2)ここは定石どおり、テンポラリテーブルを介して必要なレコードだけ抜き出して作業をする (移動ボタンを使ったレコード移動をあきらめる)のがよいのでしょうか?
52 : >>51 1) しない。低下するかも。 2) はい。
53 : >>52 ありがとうございます
54 : すみません。質問させてください。 現在Access2000+SQL-SERVER を使っていますが、 MDBで開発してた時には、あるクエリーを元にして またクエリーを作成して、それにパラメーターを 与えてレポートから開けたんですが、ADPの場合 はどのようにするんでしょうか?。 簡単なストアドプロシージャにパラメーターを与えて、 レポートなどを実行する方法はわかったのですが、 そこで行き詰まっています。 あるストアドを元に、さらにストアドを作るようなことは できるでしょうか?。
55 : >>54 >簡単なストアドプロシージャにパラメーターを与えて、 >レポートなどを実行する方法はわかったのですが、 >そこで行き詰まっています。 う〜〜ん、そこまで分かってるのなら完璧じゃないですか。 何に行き詰まってますか? >あるストアドを元に、さらにストアドを作るようなことは >できるでしょうか?。 ストアドはテキストですのでコピーして張り付けだと思いますが。 ストアドはクエリよりも色々なことが出来て便利だと思ってます。
56 : >>54 レポートでパラメータを使いたいのなら、 1.従来クエリで作ってた部分をストアドプロシージャとして作る。 2.クエリのパラメータはストアドの引数に置き換えて作る。 (例)fooというテーブルのCODEフィードで絞り込みする場合 Create Procedure test ( @code int ) As SELECT * FROM foo WHERE CODE=@code return 3.パラメータ入力用のフォームを作る。 (例)form1というフォームにtxtCodeという名前のテキストボックスを付ける 4.そのストアドプロシージャをレコードソースにしたレポートを作る。 レポートの「入力パラメータ」プロパティを設定する。 (例)@code int=Forms!form1!txtCode 5.あとはそのフォームを開いてテキストボックスにコードが入っている 状態で、4.のレポートを開くとコードで絞り込まれてレポートが開かれる。 実際には3.のフォームにレポートを開くボタンを付けるとよい。 ストアドプロシージャをソースにしたストアドプロシージャは作れない ので、SQL文を工夫してストアド一つにまとめるしかないと思われ
57 : >55 さん、56さん レスありがとうございました。ACCESSで7年ほど飯を食ってきましたが、 ここにきてまた新たに勉強しなおします。 MDBのように、Aクエリーを元にしてBクエリーを作成して、集計結果の レコードセットを得る、というやり方に慣れてしまったので、 ストアドでも同じことをしたいと思って質問させていただきました。 現在、MDBのクエリビルダのSQLソースをストアドに貼り付けて 地道に作業していますが、繰り返すうちにやっと構文の基本くらいは わかってきました・・・。 >ストアドプロシージャをソースにしたストアドプロシージャは作れない >ので、SQL文を工夫してストアド一つにまとめるしかないと思われ これが答えなんですね・・。とりあえず、SQLの結果を テーブルにINSERTして、そのテーブルを元にまたSQLを書く、という 方法で回避することにします。モジュールの中で発行するので 直接SQL?とかいうやつになっちゃうんですが・・。 >ストアドはクエリよりも色々なことが出来て便利だと思ってます。 そう思えるようにがんばります。 ちなみにACCESS2002も手元にありますが、ためしにインストールしたら 早速落ちました。
58 : >57 AccessのクエリがレコードソースのクエリのようなものをSQLサーバーなんかで作る場合は 1. ストアドの中のSQLの中にインラインで書く 2. ストアドの中で一時テーブルに結果のレコードを入れて、 同じストアドの中でそれを元にしたSQLを作る 3. VIEWをレコードソースに使う とかいろいろ手があります。 データ操作に関してはAccessでクエリ+(マクロ or VBA)でやっていたことのほとんどは ストアドのみでやれると思っていいかと。 同時アクセスの場合の処理とかを考えるとストアドがおすすめ。 あとSQL Server 2000の場合はAccess2002を使ったほうが ユーザー定義関数に対応している等でイイと思う。 (Access2002でDBを作成した場合、デフォルトのセキュリティが甘甘なのには注意)
59 : 今までLANでAccess97使用しているんですが、電話接続環境でもAccess使用すること になったらSQLserver等もっとしっかりしたデータベースソフト入れないといけませんか? それとも、なんとかしてAccessだけでも電話接続環境でも使用できるんでしょうか? 初歩的な質問ですいませんが よろしくお願いします。
60 : 10000レコードのテーブルから20件を抽出するクエリをリモートから実行した時、 レコードすべてをリモート側に引っ張ってきてから20件を抽出するのがAccess、 抽出結果の20件だけをリモート側で引っ張れるのがSQLserver。 どちらでも動くが効率はSQLの方が断然良い。
61 : (^^)
62 : http://www.isis.ne.jp/ http://www.maromaro.com/ http://www.tomita.net/ 本を読もう
63 : 試験
64 : SQLServer7.0を最近触り始めたのですが教えてください。 あるマシンで作ったデータベースなんですが、C:\MSSQL7\DATA\hogehoge.MDF ファイルを別のマシンにコピーしてデータベースとして認識させるにはどうやっ たらいいんですか?インクルードで取り込もうとしても、元マシンはSQL-Server のシステムは消してしまって接続できずデータだけ残っているので…
65 : http://homepage3.nifty.com/digikei/ten.html いいね〜 これ♪
66 : >>64 sp_detach_dbを調べて味噌
67 : >>66 w(゚o゚)w オオ〜。これこれ。無事解決。 ありがとうございました。
68 : 教えてください・・・。 パラメータが設定されたストアドプロシージャの結果を エクセルに書き出す方法は無いでしょうか?。 DoCmd.OutputTo acOutputStoredProcedure, "ストアドプロシージャ名", acFormatXLS, _ EXCELファイル名, True だと、パラメータの内容を入力するウィンドウが表示されます。 これを自動化したいのですが。 よろしくお願いします。
69 : 明細を伴う伝票入力で、明細部をワークテーブルにして一括確定する場合 新規入力(追加)の場合と削除の場合はいいのですが、修正(更新)の場合は どのようなやり方が一般的なのでしょうか? 入力したレコードが既にあれば更新、なければ追加すると聞いたんですが これだと一件一件レコードごとに処理しなければならないですよね。 私は修正を行う明細行を全て削除して、その後ワークテーブルのデータを全て追加する というやり方をしてたら、普通はそんなやり方をしないと会社の人に言われました。 皆さんはどのようなやり方をしているのでしょうか?
70 : YAHOO!BBのユーザーへの特報!!! 今YAHOO!BBでADSLを利用されてる方。 月額料金を無料にできる方法をお教えします。確実な方法です し方法も一つではなく何通りお教えしますので、ヤフーbbのユ ーザーである限り料金発生なくずっと使えます。 興味のある方は以下のメールアドレスに連絡ください。 料金をとめる方法は少しの謝礼でお教えします。 ryoukinn5000@yahoo.co.jp ryoukinn2003@yahoo.co.jp よろしくお願いします。
71 : >69 私自身は最近コーディングはほとんどしないのですが、明細形式のデータを変更する 時はワークのDelete-Writeを一括で行いますね。他者に依頼するときも仕様書にもそう 明記します。 パフォーマンス的にどうとはケースバイケースなので正直なんともいえませんが、 アフォな人 or 新人君に1行づつcommitされたりするような変なコーディングを防ぐため です。
72 : 最近はセキュリティーが不安で使えない。
73 : この辺読んだ?? 入門 http://www.sqlpassj.org/bunkakai/begin/series/default.aspx SQLServerテーブル回転! http://support.microsoft.com/default.aspx?scid=kb;ja;JP175574 MSDE を含む ADP の配置方法 http://support.microsoft.com/default.aspx?scid=kb;ja;jp240293 SQL Server 2000 自習書シリーズ http://www.microsoft.com/japan/sql/techinfo/sqleval/self_doc.asp MSDE による Access ソリューションの作成および展開 http://www.microsoft.com/japan/msdn/officedev/officexp/odc_modmsde.asp Transact-SQL の概要 http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/tsqlref/ts_tsqlcon_6lyk.asp
74 : ADOで非連結のフォームを使ってConnectionを接続するのはどのタイミングで 行うのが良いのでしょうか? 書籍等を読んでも、フォームを開くときに接続して、閉じるときに接続を切るやり方 と、起動時に接続してずっと接続したままのやり方とあってケースバイケースだとは 思うのですが、皆さんはどのようにしているのでしょうか? また、フォームを開いたときとかにはまだ接続せず、登録ボタン等を押下して はじめてconnectionを接続して、登録が確定したらすぐまた接続を切るようなやり方は 良くないのでしょうか?
75 : >>74 ttp://www.users.gr.jp/ml/archive/access/Access81.asp ここの08145からは参考になりませんか?
76 : (^^)
77 : http://64.246.31.103/FREE/20030404/@@@@@@@@@@@@@@@@@@@@/&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&/((((((((((((((((((((/1234567890.0987654321/1234567890.0987654321/1234567890.0987654321/G267AB.asf
78 : >>74 神後輪!!
79 : SplServerです。 dtsパッケージで固定長txtでエクスポートすると一行の長さがずれるのですが。 ちなみに全角半角混在カラムがあります。 バグでしょうか?
80 : >>79 バグです http://support.microsoft.com/default.aspx?scid=kb;ja;271247
81 : うわSplだって。。 携帯からだったのでスマソ。。。 >> 80 レスThx! うーん、インポートでなくエクスポートなんですけどね。。 とりあえずDTSでは固定長でデータのやり取りするな、ということでしょうかね。。 ショボイなぁ。。。
82 : (^^)
83 : ∧_∧ ( ^^ )< ぬるぽ(^^)
84 : すいません。SQL-server 7.0 についてお教え下さい。 業務のため Desktop Edition を各クライアントマシンに導入したい のですが台数の制約は何台までなのでしょうか? 参考までにここを見たのですが... http://support.microsoft.com/default.aspx?scid=kb;ja;207809 接続クライアント数モード ライセンス (CAL) により、 カバーされているクライアント コンピュータにおける使用の場合に限り、 ライセンスが与えられています。 ・・・・・一応条件を満たしているのですが、100台近くの クライアントマシンには適用できるかはちょっとわからないのです。
85 : http://homepage.mac.com/hitomi18/
86 : >>84 どんなシステムなんだろう? 非常に気になる
87 : >>86 いや、たいしたことないのです。 鉄鋼メーカーで、あるシミュレーションをしたいとの要望がありまして 現行は中央のSQLサーバーでマスタデータを保管し、 クライアント端末にはAccessベースのシステムを置いています。 クライアントは中央からマスタデータを取り込んで クエリーで処理し、結果をまたSQLサーバへ反映という具合にしていました。 しかし、遅い・不安定等で大幅改善を命じられてしまいました。 このため、Accessを Desktop EditionのSQLサーバを置き換え、 プロシジャーで高速化を図ろうとしています。 でこのシミュレーションを行うクライアントが100,200台ほどあるのです。 中央で全て処理すればいいのでは、という意見もありがちですが システムの性格上、設計者のパソコン内で完結させないといけないという 制約もあり、ちょっと厄介になっております。 MS製品は品質は良いのですがライセンスに縛られるので 十分な下調べが必要と思い書き込みさせていただきました。 所有する、一つのSQLサーバ7.0で複数のクライアントに Desktop Editionは導入できるものでしょうか ご存じでしたらどうかよろしくお願いいたします。
88 : http://homepage.mac.com/ayaya16/
89 : SQL Server2000のクエリアナライザでクエリを発行する時に, 「統計」オプションを選ぶと実行時間みたいなのがでてくると 思うのですが,それの時間の単位ってなんでしょうか? ご存知の方いらっしゃいませんか? ミリ秒かマイクロ秒か・・・・ 例えばこんな感じなんですが・・・・ {合計,平均} クライアントの累積処理時間 4 1.46667 サーバー応答の累積待機時間 6 1.86667
90 : {合計,平均}じゃなくて{値,平均}でした... しかも一個のクエリでの問い合わせでも 値=平均 にならないのが 怪しい・・・・・なんだろ・・・
91 : Win2K + Access2002 + MSDE でテスト開発をしています。 が、オブジェクトバーにストアドプロシージャの項目がないんです! 新しいプロジェクトを作成してもでてきません。 何か裏コマンドでもあるのでしょうか?
92 : ━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―
93 : ∧_∧ ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。 =〔~∪ ̄ ̄〕 = ◎――◎ 山崎渉
94 : Access2002 + MSDEを使ってます。 フォームにある日付範囲を基に一時テーブル(##TEMPTABLE)をプロシージャで作りました。 ##TEMPTABLEをレコードソースとしてレポートに表示させようとするとエラーが出ます。 「このフォームまたはレポートで指定されているレコードソース ##TEMPTABLE は存在しません」 ##TEMPTABLEをレコードソースとしてフォームを開くとうまく動作します。 レポートだけは特別なにかすべき事がありますか? 詳しい方の回答待っております。
95 : (σ・∀・)σゲッツ!!ならココね http://www3.kcn.ne.jp/~barozza/ 荒らすの楽しいね
96 : >>94 http://www.horikawa.ne.jp/msde/gihyo/sql04/sql04_03.html
97 : >>96 レスありがとうございます 結局、フォームから呼び出されたストアドによって作られた一時テーブルを レポートのレコードソースにすることができなさそうですね。 レポートのレコードソースをストアド名にしてパラメータを渡すとうまく 動作するのですが、それだったら一時テーブルを作る意味がないですしね。。。
98 : Win2K,Access2K,MSDEを使っています。 抽出したデータ(Recordset)を区切り形式のtxtファイルとしてエクスポートしたいのですが、 何か良い方法はありませんか?
99 : >>98 ストアドでbcpを起動してエクスポートする bcpとかxp_cmdshellを検索すれば分かると思う ストアドとフォーマットファイル作る ストアド例 EXECUTE master.dbo.xp_cmdshell 'c:\mssql7\Binn\bcp mydb.dbo.mytb out c:\test.txt -PXXXXXX -fc:\test.fmt'
100read 1read
1read 100read
TOP カテ一覧 スレ一覧 削除依頼 ▲
・ 次のスレ
PageMaker7.0J **CADアーキトレンド** EXCEL,ACCESSで曖昧な表現を。