Delphi相談室(中級者以上)その12

このエントリーをはてなブックマークに追加
946902:04/06/24 00:05
えーと(^^;)こんな隠蔽もできない言語といわれてくやしいとかそういうことですか?
たいした弊害でもない、といってる時点で初心者丸出しですが。
なんだ、手の込んだ釣りだったのか
>たいした弊害でもない、といってる時点で初心者丸出しですが。

しかし、あれば便利だけどなくてもこれまでやってこれたし、なんか
つまらないことをほじって釣りしてる感じだね。多重継承ができない
から不便、begin end がダサイ、とかと同じレベルのような。
902 は隠蔽したいから.NETを勉強するんだとさ。
なんつうか・・・

どこが重要で、なにが重要じゃないのかってのが正しく見極められない人間は、
どーでもいいことで拘るから仕事も遅いし融通が利かなくて使えない。

もう少し、柔軟な思考能力を身に付けられるといいな。
902は釣り確定だな
こんなのにいつまでも相手しなくていいよ

↓ はい、次の方どうぞ
句読点を使い分けて荒らしと言ってみるテスト。
>>901
なにをしたいかよくわからんが、
DateTimePicker.Format := ' ';
とでもしておけばとりあえず非表示になる。
954902:04/06/24 19:30
955デフォルトの名無しさん:04/06/25 16:51
くだすれでスルーされてしまいましたので、
こちらで質問させてください。

今、TPersistentを継承したTData1,TData2...TDataNという
いくつかのクラスをファイル入出力させるためTHogeというクラスを作り、
Dataプロパティに先ほどのTDataクラスを保持させるようにしています。

THoge = class(TComponent)
published
 property Data: TPersistent read FData write SetData;
end;

WriteComponentできちんと書き込みは出来ているのですが、
実行時のDataプロパティの実際の型が不定のため、
ReadComponentでうまく読み込むことが出来ません。
やはりDataプロパティの実際の型をTHogeにプロパティとして持たせ、
Dataプロパティを偽プロパティを使って、
ストリームからの読み込み時にその型を判別し
個々の読み込みを行うという方法をとるしかないのでしょうか?

なにかスマートな方法がありましたら教えてください。
>WriteComponentできちんと書き込みは出来ているのですが、
THogeのインスタンスをWriteComponentしても
Dataのプロパティまでは書き込み出来ない気がしますが。
>>956
TPersistent.GetOwner
使ったことはないが
>>955
TDataN を THoge の中に置くのではなく、クラスの外に作って THoge から
参照するだけにしておけばどうですか?

この場合、TDataN は TPersistent ではなく TComponent から派生します。

そうすれば Read/Write や Create/Destroy の面倒は Owner (フォームや
データモジュール) が見てくれるので、特に何もする必要はありません。
>>958

dData = record
case DataType: Integer of
{Data1..Nのデータ型を定義}
end;

THoge = class(TComponent)
public
property Data: dData read FData write SetData;
end;

みたいのじゃダメなの?的外れならスマソ
>>955
だった
>>959
955 じゃないが書き込み可能なメンバーにレコードを使うのは
何かと不便だと思うけど。
・パブリッシュできない。つまり dfm に保存することができない。
・Data.X := Data.X + 1 みたいな操作ができない。
962955:04/06/25 23:33
いろいろなご意見、ありがとうございます。

>>956
Dataへの代入時にFDataを実際の型でCreateしてますんで、
WriteComponent時にはきちんと保存できているようです。

>>958
TComponentから派生させるように作り直すことも考えたのですが、
先ほど簡便性のためにTData1,TData2...TDataNなど書いたクラス群は
実際にはTCustomDataA,TCustomDataBとあり、
さらにTCustomDataAを継承したTDataA1,TDataA2...というクラスが
数十個、すでに構築されてますんで、これをすべてやり直すのも
いかがなものかと思ったわけなんです。
どうせTHogeは、ファイル入出力時に一時的にCreateするだけですし。

>>959
近いものとして、以下のようにしようかとも思いました。

THoge = class(TComponent)
public
 property Data: TPersistent read FData write SetData;
published
 property DataType: TClass read FDataType;
end;

Dataプロパティへの代入時、FDataTypeへその型を代入しておいて、
読み込み時にはFDataTypeに代入されている型をもとにFDataをCreateさせようかと。
もっともそのためにはDataプロパティを偽プロパティを設定して
読み書きする必要があるかと思うんですが。
なんか途方もなく無駄なことをしようとしてるような気が。
詳細はともかく、最終的に実現したいことを素朴に書いてみたら >>955
>>963
簡単に書くと、

 ・TData...のクラスの内容をファイル入出力したい。
 ・TData...の構成はできればあまりいじりたくない。

の、2点のみですw

>>962で書いたことを試してみたんですが、ちょっとうまくできませんでした。
やっぱりTData...をTComponentから派生させたほうが楽なのかな…
965デフォルトの名無しさん:04/06/29 15:06
閉店間際ですが、質問させてください。

Delphi 7 + dbExpress を利用して、ローカルの MySQL を操作しようとしています。
カラム数が 11 あるテーブルに対して、TSQLQuery 経由で 'select * from hoge...'
としたところ、TSQLQuery.FieldCount が 6 を返します。頭 6 つ分しか取得できて
いないようです。

同じ問い合わせを SQL エクスプローラから行うと、正しく 11 カラム返って来ます。

MySQL のバージョンは 4.0.20a です。MySQL も dbExpress も初めてなので、問題の
切り分けができず困っています。心当たりのある方、いらっしゃいませんか。
MySQLではないけど
Last;First;
をしないと件数正しく返さないことがありました。
参考になるかどうか。

MySQL4は情報少ないよなあ。
>966
その件数ってレコード件数のことではなくて?
968965:04/06/30 16:33
>>966
情報ありがとうございます。ただ残念ながら、今回は TSQLQuery.Open メソッドの
直後で FieldCount の値が決まっているので、それが直接の原因ではないようです。

なお、insert や update では 10 以上のカラムを同時に挿入・更新できました。
今のところ、select 文を発行するときは * を使わずに 6 つ以下のカラム名を列挙
してごまかしています。

何か分かったらここに還元します。
Delphi + BDE で Paradox 形式のデータファイルを使用している
スタンドアロンのデータベースアプリがあります。

これをC/S型DBアプリにする方法を教えてください。

データベースソフトに Firebird を入れて、BDE系のコンポーネントを IB系に換えれば
いいのかなぁ?と漠然と考えてますが、C/S型は作るのが初めてなのでどうしたら
いいのかよくわかりません。

クライアントは Windows XP のマシンが2台(将来的には6台程度まで増えるかもです)。
サーバーはこれから用意するので、Unix 系でも Windows でもどっちでもいいです。
開発言語は Delphi6 Professional です。

参考になるURLだけでもいいので、よろしくお願いします。
970デフォルトの名無しさん:04/07/05 04:25
| 何について調べますか?
| ┌────────────┐
| | おまえの消し方         |
| |                     |
| └────────────┘
| [ オプション(O) ]   [ 検索(S) ]
|
`──────────┐ ┌───
           , '´l,  ..| ./
       , -─-'- 、i_  |/
    __, '´       ヽ、
   ',ー-- ●       ヽ、
    `"'ゝ、_          ',
      〈`'ー;==ヽ、〈ー- 、 !
       `ー´    ヽi`ヽ iノ
                ! /
              r'´、ヽ
              `´ヽノ
>>969

> データベースソフトに Firebird を入れて、BDE系のコンポーネントを IB系に換えれば
> いいのかなぁ?と漠然と考えてますが、

そんな感じでどうぞ。
でも、差し替えるのならBDEからdbExpressもおすすめです。

サーバはライセンス関連でUnix系がおすすめ

ただ、差し替えるにあたってデットロックが起こらないように
トランザクション関係はしっかりね
>>971
レスありがとうございます。

昨日、Firebird を入れてみました。
今日、Marathon を入れてみましたが、
使いかたがわかんね;;

いそいでないのでゆっくりやります。
973デフォルトの名無しさん:04/07/07 02:03
>>970
ワロタ
>>973
非常におもしろいんだが、スレ違いだと思う。
Office アシスタントはMSですら失敗だったと認めるくらいだが。
いるかさん,最近流行のきざし?
【お前を】Excelのイルカ【消す方法】
http://aa5.2ch.net/test/read.cgi/kao/1088168743/
パーソナル版ユーザーが
カスタムコンポーネントを製作する事は無謀なのでしょうか。
Unicode 対応 TMemo 派生コンポーネントを製作したのですが、
どうも挙動が不審です(終了時にメッセージを処理しきれていない模様)。

プロフェッショナル版を買うべきか、悩んでいます。
C#買え
>>976
それって版関係あるのか?
>>976
何版かは関係ない
>>978
VCLがどの様にメッセージを処理しているのか、
VCLのソースが参考になると思っているのですが。

>>977
スターターアップキャンペーンでしたっけ?
アレが終わってしまったので、今は買う気はありません。
パーソナル版はVCLのソースがついてこないんだっけ?

あれば確かに参考になるけど、他のコンポーネントのソースでも参考になるとおもわれ
982デフォルトの名無しさん:04/07/09 01:56
Unicode対応って・・・ これじゃ不満か?

Tnt Delphi Unicode Controls
http://tnt.ccci.org/delphi_unicode_controls/
>>982
Win98だとまともに動かないんです。
Win9x で正しく動かないのは .NET Framework も同じ。

ELPack がつかえるぞ
>>984
どうも動かすには、Pro版に含まれる
コンポーネント(masks.pas)が必要なようです。
いやはや。やはりPro版を買うかなぁ。
いまから Pro 版買うのは無駄。UNICODE 対応エディタつくるんなら C# で
やっておけばいい。無駄にならないし。ベータだけど Express 版なら無料で
DLできる。あとすこしで。
ベータなんて軽々しく進めるもんじゃないと思うが。
システム側に不具合出るって報告もあるし。
>>986
>C# でやっておけばいい。無駄にならないし。
言い切るのはどうかと。.NETイラネっていわれてるし。
>>988
(中級者以上)
Delphi8 をすすめるべきなんだろうが、ベータにも達してないし
>>989 ちょっとびっくりするほど認識不足だと思うよ。
> システム側に不具合出るって報告もあるし。

ソースキボン
994デフォルトの名無しさん:04/07/10 01:11
>>987
このセキュリティ証明書は、信頼できる会社から発行されていません。
証明書を表示して、この証明機関を信頼するかどうか決定してください。

とか出るし(w
流石MS
> とか出るし(w

だから何?