1 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 12:18:00 ] Delphi(デルファイ)について、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を 勇気を持って書き込むスレッドです。 Delphi使いが優しくコメントを返しますが お礼はDelphiの布教と初心者の救済をお願いします。 <前スレ> くだすれDelphi(超初心者用)その42 pc11.2ch.net/test/read.cgi/tech/1180613145/ <過去スレ> DelWiki避難所 delwiki.info/?Delphi 関連の過去スレッド
29 名前:デフォルトの名無しさん [2007/08/04(土) 23:21:56 ] 彡川川川三三三ミ〜 川|川/ \|〜 プゥ〜ン __________________ ‖|‖ ◎---◎|〜 /前スレのってCESU-8がどうのこうの言ってたやつか 川川‖ 3 ヽ〜 < それまで散々粘着してたのにUCS2だって言われてから急に消えて笑ったな 川川 ∴)д(∴)〜 \ 川川 〜 /〜  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 川川‖ 〜 /‖ _____ 川川川川___/‖ | | ̄ ̄\ \ / \__| | | ̄ ̄| / \___ | | |__| | \ |つ |__|__/ / カタカタカタ /  ̄ ̄ | ̄ ̄ ̄ ̄| 〔 ̄ ̄〕 | | ̄
30 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 03:17:57 ] tnt買収してさっさとUnicodeに公式対応してくんないかな
31 名前:デフォルトの名無しさん [2007/08/05(日) 10:32:35 ] めちゃめちゃ初心者なんですけど、セルに色をつけるってどうやるんですか? Ondrawcellを使うのはわかったんですけど、ヘルプ見てもコマンドがよくわかりません><
32 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 11:29:54 ] >>31 何のセルだよ。TStringGrid? あとこのスレは超初心者用なんだからいちいち初心者ですなんて言わなくておk
33 名前:デフォルトの名無しさん [2007/08/05(日) 11:42:45 ] はい。おっしゃるTStringGridです。 excelのような簡単な表を作成し、この列は赤、この列は青のように色分けを したいのですが、canvasコマンド?がいまいちよくわからないのです。
34 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 11:51:15 ] ヘルプでTCanvas を一度全部見てゆくといいよ。 Brush.Color とか Pen.Color とか Font.Color で色を変えられるよ 文字を描く場合は、TextRect で枠に合わせて描くと
35 名前:デフォルトの名無しさん [2007/08/05(日) 12:19:11 ] たびたび申し訳ありません 色分けについて、 www2.biglobe.ne.jp/~sakai/gensfaq2.htm#a017-1 このページを発見したのですが、 // セルに書き込む TextRect(Rect, Rect.Left + 2, Rect.Top + 2, StringGrid1.Cells[Col, Row]); という行の+2などの意味がよくわからないのですが教えていただけたら幸いです。
36 名前:デフォルトの名無しさん [2007/08/05(日) 12:30:09 ] delphi って、近年なくなるってことはないですか? 将来5年間くらい存続する確立は何%くらいでしょうか?
37 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 12:46:18 ] 今までもさんざん危機を叫ばれていながら存在し続けているので35%の確率で存続するのではないでしょうか? まあそんな事は神の味噌汁ですが。
38 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 12:49:47 ] >>35 単なる足し算。 左上よりちょっと真ん中に描画するって意味だけど、 セルが大きいと無意味ですね。
39 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 13:12:01 ] 2年なら50%、5年なら20%くらいの確率で生き残れる、と思う。
40 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 13:22:27 ] ま、いつ発売中止になっても驚かない、って状況ではある。
41 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 13:25:10 ] 例えば10年以上も前にとっくに実機が販売されなくなったMSXだけども、 いまだにMSXユーザーってのは根強く存在するわけで。 ユーザーがいなくならない限り存在し続けるんじゃないかな。どんな形であれ。 しかし色々なゴタゴタがあったのにここまで残ってこられたのは本物なんじゃないかな。
42 名前:デフォルトの名無しさん [2007/08/05(日) 13:56:52 ] 彡川川川三三三ミ〜 川|川/ \|〜 プゥ〜ン __________________ ‖|‖ ◎---◎|〜 /しかし色々なゴタゴタがあったのにここまで 川川‖ 3 ヽ〜 < 残ってこられたのは本物なんじゃないかな。 川川 ∴)д(∴)〜 \ 川川 〜 /〜  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 川川‖ 〜 /‖ _____ 川川川川___/‖ | | ̄ ̄\ \ / \__| | | ̄ ̄| / \___ | | |__| | \ |つ |__|__/ / カタカタカタ /  ̄ ̄ | ̄ ̄ ̄ ̄| 〔 ̄ ̄〕 | | ̄
43 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 14:01:53 ] そんなの、N88Basic ユーザがまだいるわいな、というくらい製品として無意味。
44 名前:デフォルトの名無しさん [2007/08/05(日) 14:15:03 ] 彡川川川三三三ミ〜 川|川/ \|〜 プゥ〜ン __________________ ‖|‖ ◎---◎|〜 /そんなの、N88Basic ユーザがまだいるわいな、 川川‖ 3 ヽ〜 < というくらい製品として無意味 川川 ∴)д(∴)〜 \ 川川 〜 /〜  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 川川‖ 〜 /‖ _____ 川川川川___/‖ | | ̄ ̄\ \ / \__| | | ̄ ̄| / \___ | | |__| | \ |つ |__|__/ / カタカタカタ /  ̄ ̄ | ̄ ̄ ̄ ̄| 〔 ̄ ̄〕 | | ̄
45 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 15:12:33 ] ↓>>17 ,22,28,29,42,44 _____ /::::::::::::::::::::::::::\〜プーン /:::::::::::::::::::::::::::::::::::::::\〜プーン |:::::::::::::;;;;;;|_|_|_|_|〜プーン |;;;;;;;;;;ノ∪ \,) ,,/ ヽ〜 |::( 6∪ ー─◎─◎ )〜 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ |ノ (∵∴ ( o o)∴)〜 < えーと、製品として無意味っと・・・ | ∪< ∵∵ 3 ∵> \_____________ \ ⌒ ノ_____ \_____/ | | ̄ ̄\ \ カチャ ___/ \ | | | ̄ ̄| カチャ |:::::::/ \___ | \| | |__| |:::::::| \____|つ⊂|__|__/ / |:::::/ | ̄ ̄ ̄ ̄| 〔 ̄ ̄〕
46 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 15:14:31 ] またUnicodeの人か
47 名前:デフォルトの名無しさん [2007/08/05(日) 18:16:43 ] 彡川川川三三三ミ〜 川|川/ \|〜 プゥ〜ン __________________ ‖|‖ ◎---◎|〜 /またUnicodeの人か 川川‖ 3 ヽ〜 < 川川 ∴)д(∴)〜 \ 川川 〜 /〜  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 川川‖ 〜 /‖ _____ 川川川川___/‖ | | ̄ ̄\ \ / \__| | | ̄ ̄| / \___ | | |__| | \ |つ |__|__/ / カタカタカタ /  ̄ ̄ | ̄ ̄ ̄ ̄| 〔 ̄ ̄〕 | | ̄
48 名前:Cの老師を目指す女 mailto:sage [2007/08/05(日) 20:31:33 ] 裕美子といいます。大都会の片隅で×いちで孤独なOLをしています。 私はDelphiはあまり得意ではありませんが、Delphiユーザーは ハイレベルなプログラマが多いので尊敬しています。がんばってくだ さい。 上のAAから悪しきオーラを感じます。あなたはプログラマではなく 単なるフィッシングがネチな2ちゃん根らですね。たとえどんなに 策を労使ようとも私たちはくじけますん。
49 名前:Cの老師を目指す女 mailto:sage [2007/08/05(日) 20:32:20 ] ごめんなさい くじけますんじゃなくてくじけませんです。訂正してください。
50 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 22:47:39 ] 小池徹平より不細工な女は女とは認めますん
51 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 22:52:40 ] 許しますん
52 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 23:13:17 ] 労使よう
53 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 23:58:36 ] まあ仮に近い将来消えちゃったとしても、 ライブラリソースに手を入れられるのが唯一の救いだな 64bit全盛時代が来るまではそれで何とか繋げる
54 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 00:22:07 ] べつにDelphiじゃなくても、しのげる人は大勢いますけど・・・
55 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 00:23:41 ] Delphiユーザは、ふさによると2%くらいなんだから、消えたってまったくこの業界 に影響ないでしょ。
56 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 00:28:40 ] レコード型を使おうと思っているのですが それぞれのフィールドの型が循環参照(?)している場合は どうやって定義したらいいですか。 type Ttest1 = record index: Integer; test2: Ttest2; end; type Ttest2 = record index: Integer; test1: Ttest1; end;
57 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 00:28:50 ] 隔離スレでやれ
58 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 00:37:17 ] >>56 再設計を勧める
59 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 00:42:51 ] type PRec1 = ^TRec1; PRec2 = ^TRec2; TRec1 = record rec2: PRec2; end; TRec2 = record rec1: PRec1; end; みたいに一つのtypeにまとめてTRecX, PRecXをついにして定義すれば可能。 ただ>>56 みたいなポインタではなく変数そのものを循環的に格納するなんて論理的に不可能だぞ。
60 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 01:06:50 ] ありがとうございます。 ポインタでやってみます。
61 名前:デフォルトの名無しさん [2007/08/06(月) 01:07:57 ] クラスにしちゃえよ
62 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 03:52:46 ] 前スレ999 > uPnPを使ってuPnP対応のルータにポートを開閉を要求するにはどうしたらよいのでしょうか nw.odoruinu.net/?p=191 とか、どうでしょ。 タイプライブラリを作る方法は、この辺を参考に。 www.delphipraxis.net/post598522.html www.delphipraxis.net/topic59019,0,asc,0.html
63 名前:デフォルトの名無しさん [2007/08/06(月) 12:56:08 ] 先輩にDelphi勧められているんでこの夏休みに勉強しようと思うんですが、 友達に聞いたらもう終わってるとか言われたんですがどうなんでしょう? 何でもキリックスとかに移ったとか(よくわからないのでスマソ)
64 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 13:05:23 ] Delphiなんて古木を今更わざわざ拾わなくても ゆとりプログラマは根の張った大木にぶらさがって優雅にC#でもやってなさいってこった
65 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 13:44:04 ] ポインタないし
66 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 14:03:47 ] それはJAVAだろ・・・・・っといってもDelphiのClass形と同じような参照としてのポインタはあるんだけどな
67 名前:デフォルトの名無しさん [2007/08/06(月) 15:07:11 ] StringGridについて詳しく解説されてるページとかありませんか? あったら教えてください。
68 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 15:46:58 ] >>63 Unicodeベースでなければならない、.NETでなければならない、 就職に繋げたいということでもないなら Win32な開発環境としては別に終わっちゃいない。 今なおWindowsで最も楽な開発環境の一つ。 Kylix(カイリックス)はDelphiのLinux版で かなり大昔にバージョンアップが途絶えて どちらかというとこっちの方が終わってる環境だ。
69 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2007/08/06(月) 15:58:17 ] >>35 ためしに+2を取り除いたり違う数(たとえば10とか20とか)にして実行してみましょう. また片方の値だけを変えて実行してみてください. その数が何を意味しているのか,またどうして+2なのかがわかると思います. DelphiやVBはコードを書いたら速攻で実行できるので いろいろ考えるよりもまずは条件をいろいろ変えて動かしてしまいましょう. >>36 いつ無くなってもおかしくありませんがまだしぶとく生き残ると思います. もっとも,大切なことはDelphiという道具の使い方を覚えることではなくて 自分のやりたいことを形にする技術を身につけることなので, Delphiでそれを身につけていればどの開発環境にいってもうまくやっていけるはずです. >>56 そのTtest1とTTest2が別のものである必然性は本当にありますか? 実はひとつのもので済んだりはしませんか? 本当に相互に参照しなければならない場面は案外少なかったりします. これはレコードに限らず,オブジェクトやユニットにも言えます.
70 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 16:05:48 ] >>68 ネタにマジレスする馬鹿
71 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 16:32:23 ] dephi6 personalを使っています。 クラスのメンバとして定数を定義したいのですがpublicのあたりに public const val: Integer = 0; としても「'END'が必要な場所に'CONST'があります」とコンパイルエラーになります。 こういうものはプロパティで代用するしかないんでしょうか。
72 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 18:52:57 ] クラスのメンバではないグローバルな定数で代用してください
73 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 18:56:48 ] プロパティにするとインスタンス生成しないと参照できなくなるから class function val: integer; にするのも手。オーバーヘッドが発生するんで一長一短だな。
74 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 19:20:37 ] >>71 使ってる環境をTurbo Delphiに変えれば可能です
75 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 19:27:21 ] Delphiは関数内関数や、関数の中で構造体を定義出来たり、定数を定義出来たりするのに クラスの中で そういうのが出来ないんだよな まあ、ユニットを1つの単位と考えて、1ユニット1クラスで考えればいいと思うんだけどな
76 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 20:02:06 ] Delphi6ではできないことがわかってすっきりしました。 代替方法でやってみます。 ありがとうございました。
77 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 20:56:11 ] (´-`)。oO(なんで普通の定数だとまずいんだろう…)
78 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2007/08/06(月) 21:24:10 ] VCLのソースファイルの再構築はどうやればよいのでしょうか. Delphi 5を使っているのですが HeaderControlにメモリリークのバグがあるので VCLのソースファイル(comctrl.pas)に手を加えてみました. しかしソースファイルを書き換えただけでは駄目,bcc32でコンパイルしても駄目, パッケージの再構築をしようにもパッケージのソースファイルがないようなので困っています.
79 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 21:43:35 ] www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=061257
80 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2007/08/06(月) 22:08:45 ] ありがとうございます. おかげさまでうまくいきました. これで今日は家に帰れます…
81 名前:デフォルトの名無しさん [2007/08/07(火) 02:53:32 ] >>75 おいおい。できるってw
82 名前:デフォルトの名無しさん [2007/08/07(火) 02:54:34 ] アンチは、デマばかり振りまく。 かまうな馬鹿
83 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 03:28:23 ] ふるいバージョンではできないでしょ。質問者はそういってるし。
84 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 03:47:57 ] いつになったらテンプレートが使えるようになるんですか?
85 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 11:11:45 ] StringGridのセルを初期化するにはどうすればいいんでしょうか?
86 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2007/08/07(火) 19:26:07 ] >>85 文字列グリッドのすべてのセルの文字列をカラにするということですか? 特にそういうメソッドはないので手でカラにしてください. { 文字列グリッドのすべてのセルの文字列をカラにする手続き } procedure ClearGridCells(Grid: TStringGrid); var iRow, iCol: integer; begin for iRow := 0 to Grid.RowCount - 1 do for iCol := 0 to Grid.ColCount - 1 do Grid.Cells[iCol, iRow] := ''; end; procedure TForm1.Button1Click(Sender: TObject); begin ClearGridCells(StringGrid1); end;
87 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 20:28:16 ] これでもいけそうだぞ。 for I := 0 to Grid.RowCount - 1 do Grid1.Rows[I].Clear;
88 名前:デフォルトの名無しさん [2007/08/07(火) 21:27:39 ] >>87 オレもそうしている。 でも、行の削除なんかのときに1行削除するたびにクリアしないと、 再度行を増やしたときに前の値が出てくるのは何でなんだろう。
89 名前:デフォルトの名無しさん [2007/08/07(火) 23:04:30 ] DataBaseからデータを取得してグローバル配列変数List:array[1..8]of TListに格納しているのですが、 リストにあるデータを使おうと思ったら変な値が出てきます。 どうしたらいいのでしょうか? 環境はにD5Entです。
90 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 23:12:07 ] >>89 ・「変な値」とは具体的に何? ・値を取得するコードは? ・TListはちゃんとCreateしたか?
91 名前:89 [2007/08/07(火) 23:19:39 ] >>90 変な値とは次に使うSQL文です。 値を取得するコードは次に書きます。 TListはちゃんとFrameのInit(FormのShowイベントで呼ぶ)関数でCreateしています。
92 名前:89 1/2 [2007/08/07(火) 23:34:36 ] >>90 SQL.Add('SELECT BEID,GAKKOID'); //集計条件 if SMC.F_KT_DispType=0 then begin // SQL.Add(',MODEL'); end else begin // SQL.Add(',G_TYPE'); end; SQL.Add(',sum(SEITO) FROM V_OPE_U11 WHERE BEID=:b AND GAKKOID=:ga'); SQL.Add(' GROUP BY OWNER,GAKKOID'); //集計条件 if F_KT_DispType=0 then begin // SQL.Add(',MODEL'); end else begin // SQL.Add(',G_TYPE'); end; ParambyName('b').AsInteger := BEID; // ParambyName('ga').AsInteger := GAKKOID; // Open;
93 名前:89 2/2 [2007/08/07(火) 23:37:19 ] >>90 while not EOF do begin List.Add; p.F_KT_OWNER:=FieldByName('BEID').AsInteger; p.F_KT_STORE:=FieldByName('GAKKOID').AsInteger; //集計条件 if F_KT_DispType=0 then begin // p.F_KT_MODEL := FieldByName('MODEL').AsInteger; // p.F_KT_GAKKO_TYPE_CD := ''; end else begin // p.F_KT_MODEL := -1; p.F_KT_GAKKO_TYPE_CD := FieldByName('G_TYPE').AsString; // end; p.F_KT_SEITO := FieldByName('SUM').AsInteger; // List.Add(p); NEXT; end; 大体こんな感じです。
94 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 23:56:18 ] Jw_cad for Windows のクロックメニューってどうやって実現しているのでしょうか?
95 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 23:57:05 ] 何かクセェ List.Add; p.
96 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 00:04:17 ] >>89 うん。Listとpが怪しい。 宣言は? pは何処で入れてる?
97 名前:89 2/2 [2007/08/08(水) 00:27:52 ] >>92 の前に procedure TDM1.Get_SeitoSuu(Cond: TGakkoCond_Rec; List: TList); var p: PGakko004_Rec; beginで PGakko004_Rec = ^TGakko004_Rec; TGakko004_Rec = record F_KT_BEID: Integer; // F_KT_GAKKOID: Integer; // F_KT_MODEL: Integer; // F_KT_GAKKO_TYPE_CD: String[1]; // F_KT_SEITO: Integer; end; です。
98 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 01:23:52 ] >>97 New
99 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 01:45:05 ] クラスにして、Create で生成し、TObjectList で管理することを勧める。 1レコードごとに、New でポインタをつくってメモリ確保しなけりゃ ならないなんて、非効率すぎだし、メモリリークも心配。それに、そのコードを 見ると、ポインタそのものも理解してるのか疑問。
100 名前:89 [2007/08/08(水) 02:02:23 ] >>98 List.Add;はNew(p)でした。 >>99 14430000件以上もレコードがあるのですが大丈夫でしょうか? >>100 Get_Seitosuuは今オーバーロードして新しいの作り始めたんですけど、 そっちのほうをコピーしたのでList.Addが二回も出てきちゃったみたいです。
101 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 02:13:59 ] >>100 あらかじめ件数分かってるなら配列でいいんじゃない? すっきりするしポインタで悩むこともなくなる ちなみに>>99 の言ってることは間違ってるから無視していいよ クラスにしてもCreateする度に内部でメモリ確保してるわけで変わらない むしろ余計なものが付く分そんなに件数あると有意な差が出てくる ただその前に、全部メモリに読み込む必要あるの?300MB弱くらいにならない? SQLで完結しそうにも思えるんだけど
102 名前:89 [2007/08/08(水) 02:27:26 ] >>101 データを一覧表とグラフに集計してまとめるんです。 横浜市の学校で1990年以降に出来た小学校限定とか、 関西地区を除く地区の生徒数2000人以下の学校限定とか、 これを検索ボタンを押したら、条件変更ボタンですぐに一覧表とグラフを変えないといけないんです。 2秒以内に表示しなおすことが前提なのでいちいちSQLを使って取得している時間が無くて、 メモリに確保したままにしてグローバルから読み込もうと思ったんです。
103 名前:デフォルトの名無しさん [2007/08/08(水) 02:27:37 ] > 14430000件 ふつうは、DB使う罠w
104 名前:89 [2007/08/08(水) 02:40:36 ] >>103 使ってますよ。 SQLで取得したデータをどうするかで悩んでるんです。
105 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 02:41:15 ] >>102 やっぱりSQL発行すれば済む問題じゃないかな ひょっとしてDBから1件ずつ取得して比較してると時間がない、なんて思ってるのかもしれないけど、 SQLってのはそういう条件で絞り込んで結果だけ返してくれる道具ですよ? コード見てる限り高速検索アルゴリズムを自分で実装するってわけでもなさそうだし、 素直にSQL出しといた方がよっぽど早いかと思われます。
106 名前:89 [2007/08/08(水) 02:47:00 ] >>105 SQLは使ってますよ。 SQL使って取得したデータをいち早く表示するために考えたのが、 「取得したらグローバル変数に格納する」なんです。 ですけど、いちいちSQLでデータを取得して書き込みだと、 データを一時変数に代入するのに時間がかかりすぎていて困っているのです。 条件ボタンを押すたびに一千万件以上のデータをSQLから取得していくと、 時間がかかりすぎといわれるのです。
107 名前:デフォルトの名無しさん [2007/08/08(水) 03:01:33 ] バックエンドにDB使ってて、その中身をまんま持ってきて、 フロントエンドの言語のデータ構造に入れ込む状況が思い浮かばん
108 名前:89 [2007/08/08(水) 03:15:30 ] >>107 DBへのアクセスは専用のフォームを使っているんです。 ですけどデータ表示とかはおのおののフレームが担当しているんです。 DBへアクセスした後そのフォームが別のグリッドやリストビュー、グラフにアクセスするのはおかしいし、 引数に渡すのも不自然だし、フレームに書いていくと修正が大変なので。
109 名前:デフォルトの名無しさん [2007/08/08(水) 04:27:16 ] >>106 どうも読んでる限りではDBを使いこなせてないみたいだね SQLは色んな書き方があるから、まずはそれを学ぶといいよ SQLってのは単にレコードを1件1件読むためのものじゃない また、1000万件以上の処理ということに変な思い込みを持ってるようだけど、 DBを使う場面ってのは大抵それと同じかそれ以上の件数のレコードを扱うよ だからそれぞれのDBだってほとんどの場合それに耐えうるように設計されてる
110 名前:89 [2007/08/08(水) 04:38:09 ] >>109 分かりました。もうちょっとSQLも勉強したいと思います。 そういえば此処に来たら何を調べていたのか忘れていましたが、 今思い出しました。 TListだとSQLに変わるので、TObjectListを使おうと思ったのですが、 var Ob:TObject; begin Ob:=TObject.Create; ObjectList1.Add(Ob); Ob:=TObject.Create; ObjectList1.Add(Ob); end; と言うように同じ変数にCreateを複数回も使ってもエラーとか言わないでしょうか? また前にObjectListにAddしたオブジェクトは破棄されたり変な値が入らないでしょうか? それと共にグローバルにおいて、関数が終了したら不正なデータに代わるとか無いでしょうか?
111 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 08:34:19 ] Q 同じ変数にCreateを複数回も使ってもエラーとか言わないでしょうか? A 同じ変数にCreateしたものを複数回代入してもエラーにはならない。 ただメモリーリークに注意しなければいけないが、この場合は他の管理方法に委ねているので大丈夫 Q 前にObjectListにAddしたオブジェクトは破棄されたり変な値が入らないでしょうか A Createによりヒープにオブジェクトが作成され Addでその参照が管理されるだけなので、それは杞憂 Q 関数が終了したら不正なデータに代わるとか無いでしょうか? A オブジェクトはヒープにしか作成されない(スタックには作成されない)ので杞憂 なおTObjectのインスタンスを作成してるけど、これは単なる例? TObjectList を使うより、record を使って型を作り array of TMyRecord ; のような、動的配列の方が扱い易いよ
112 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 11:07:18 ] 2秒以内か。データベースサーバー何使って、Delphi側はからデータベースに接続するのに BDE使ってるの?ADO使ってるの?BDEのこと忘れたけど、ADOならTADODataSetのCacheSizeプロパティで 一度に取り出す行数制限できるからそれ使えば?一度に1千万のデータなんか画面に表示できないから、 一度に1千万のデータなんて読み込まなきゃいいだけ。
113 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2007/08/08(水) 11:45:03 ] >>110-111 TObjectListはデフォルトで項目オブジェクトを所有します. つまりリストをクリアしたりオブジェクトを解放すると全項目のオブジェクトを解放します. TListのような参照するだけのリストを作りたい場合は コンストラクタで引数にFalseを指定するか (ナントカ := TObjectList.Create(False) ) 生成後にOwnsObjectsプロパティにFalseを代入すると (ナントカ.OwnsObjects := False ) 所有しなくなります. つまりリストをクリアしたりオブジェクトを解放しても項目のオブジェクトは解放されなくなります.
114 名前:デフォルトの名無しさん [2007/08/08(水) 12:11:06 ] Turbo Delphi Explorerで Delphi 7と同じ規格?で作ることできますでしょうか?
115 名前:89 [2007/08/08(水) 12:37:31 ] >>111 詳しい情報有難うございます。 TObjectは例で実際には構造体を使うのですが、動的配列のほうが速いのですか? >>112 FireBirdとIBQueryを使っています。 >>113 標準だと参照型じゃないんですね。 参照型だと関数が終了した時に代入していたローカル変数をうやむやにして、 変な所を参照してしまうみたいで。でもそんな心配ないのですよね?
116 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2007/08/08(水) 15:35:15 ] >>115 Delphiのオブジェクト変数(キーワードclassを使うもの)は常にポインタです. つまりDelphiのオブジェクト変数はそのオブジェクトの場所を覚えているに過ぎません. そしてTObjectListはオブジェクトの場所の一覧です. TObjectListのAddメソッドではオブジェクトの場所が渡されて内部のリストにこの場所を書き足します. たとえば以下のようなコードだと TMyForm = class(TForm) private FList: TObjectList; procedure Nantoka; end; procedure TMyForm.Nantoka; begin obj := TMyObject.Create; // @ FList.Add(obj); // A end; @でオブジェクトが生成されてその場所が変数objに書き込まれます. Aでリストにそのオブジェクトの場所が渡ります. メソッドNantokaを抜けると変数objは消滅しますがオブジェクトそのものは残ります. (目的のビルの場所を書いたメモが捨てられてもそのビルが消滅するわけではないのと同じです) リストはオブジェクトの場所しか見ていないので 変数objが消滅しても見てはいけないところを見てしまう心配はありません. これはリストが項目オブジェクトを所有する場合もしない場合も全く同じです.
117 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 15:38:02 ] >>114 コンパイラそのものはD7から殆ど変わってない。ライブラリも殆ど同じ。 >>115 >TObjectは例で実際には構造体を使うのですが、動的配列のほうが速いのですか? いちいちオブジェクトをCreateするより、構造体の動的配列の方が一度にメモリを確保するから 多少速度も上がると思うよ。 サイズが判らない場合でも、動的配列は最初に多めにとって、足らなくなったらまた多めにとって というようにやればいい。
118 名前:89 [2007/08/08(水) 15:48:00 ] >>116 だと本来出てこない値が出てきてしまうのは何故でしょう? >>117 procedure TFrame1.ListSwitch(List1: TList; var List2: array of TSeitoSuu_Rec); var i:integer; p:PSeitoSuu_Rec; begin SetLength(List2,List1.Count);←互換性の無い型です。 for i:=0 to List1.Count-1 do begin p:=POPE004_Rec(ListA[i]); list2[i]:=p^; end; end; と成ってしまいます。 どうしたら再定義できますか?
119 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 15:55:18 ] >>118 関数の引数でソレをやったら、動的配列ではなくなる Type TArraySeitoSuu_Rec = array of TSeitoSuu_Rec; と動的配列型を定義しておいてから procedure TFrame1.ListSwitch(List1: TList; var List2: TArraySeitoSuu_Rec); とやらないと
120 名前:89 [2007/08/08(水) 15:59:06 ] >>119 解決しました。 皆さん有難うございました。
121 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 16:06:21 ] こんなレベルの人が学校関係のDB扱う仕事やってんのか… そりゃ情報流出しまくるよなとおもた
122 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 16:19:47 ] 引数で 動的配列のような格好の定義が出たら、ソレはオープン配列パラメータだ
123 名前:デフォルトの名無しさん [2007/08/08(水) 19:11:06 ] また匿名でコテハン叩きか キャノンかダかな?
124 名前:デフォルトの名無しさん [2007/08/09(木) 10:19:34 ] Delphi4 Pro を使ってます。 それでKOL(EXEのサイズが小さくなるやつ)を使いたいと思って KOLとMCKをDLして同じフォルダに解凍、「開く」からDelphi4用の パッケージ(.dpk)を開き、インストールを選択。 でもKOLaddが無いと怒られてしまった。 オフィシャルからKOLadd.zipを何度DLしても 解凍しようとすると「破損してる」って言われるし・・・ どこが間違ってるんでしょうか?
125 名前:デフォルトの名無しさん [2007/08/09(木) 17:00:21 ] メモ: TNT Unicode Controls 配布場所 Silverpoint Development club.telepolis.com/silverpointdev/sptbxlib/support.htm#installation club.telepolis.com/silverpointdev/sptbxlib/TntUnicodeControls.2.3.0.zip
126 名前:デフォルトの名無しさん [2007/08/09(木) 17:03:09 ] >>114 Explorer版は、コンポーネントのインストールができないので、 Delphi7で、コンポーネントを使っている場合は、そのままは移植できない。 THoge.Create(Self)のような、動的生成はできるので、無理やり移すことは一応可能。 (Explorer版ではない有償版や、同規格のDelphi2006では、ほぼ修正なしでコンパイルは通る)
127 名前:デフォルトの名無しさん [2007/08/09(木) 17:05:46 ] >>124 ちょっと聞きたいのですが、 KOLってどういう理由で使いたいのですか? ただ、EXEが小さくなる、という理由だと、はっきりいって、 茨の道を火を付けて歩くことになるので、やめた方がいいです。
128 名前:デフォルトの名無しさん [2007/08/09(木) 18:49:40 ] コンポーネントのツールパレットを、キーボードで、検索したいのですが、 部分一致で検索する方法はなかったでしょうか? 通常は前方一致だけのようです(というか、THogeなら、hogeにヒットする) 環境は、Delphi2006
129 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 21:18:58 ] >>127 だな。 UPXMask を勧めとく