ホーム
Top.Mail.Ru Yandeks.Metrika
フォーラム:「初心者」;
現在のアーカイブ:2013.11.10;
ダウンロード:[xml.tar.bz2];

ダウン

コンポーネントを見つけて強調表示する方法 似ている枝を探す


Александр_2012   (2013-02-04 16:18) [0]

今日は。
タスク:DBEditコンポーネントが配置されているいくつかのページにPageControlコンポーネントがあります。 プログラムは、入力ロジック(データベースのさまざまなフィールド間の依存関係)をチェックし、すべての不一致に関するメッセージをメモに表示します。 フィールドの名前が登録されているStringListがあり、入力ロジックでエラーが発生しました。 それはすべて動作します。 メモのメッセージをダブルクリックすると、PageControlのすべてのページで、(塗りつぶしロジックに違反して)正しく入力されていないフィールドに属するDBEditコンポーネントを検索し、これらのコンポーネントがフォントの色などで強調表示されるため、ユーザーはエラーが発生した場所をすぐに特定できます。 どうすればいいのかわかりませんが、かなり可能だと思います。



Cobalt ©   (2013-02-04 16:32) [1]

TMemo.SelTextを手に
またはSelStart



Александр_2012   (2013-02-04 16:46) [2]

データベースには2つのフィールドで構成されるテーブルがあります。1つのSQLクエリでは入力ロジックをチェックし、もう1つではエラーの場合に発行されるメッセージをチェックします。 問題は、多くのDBEditコンポーネントがあり、受け入れられたレポートフォームに従って単に番号が付けられていることです。 したがって、「この製品は指定された記事を取得できません」などのメッセージを受け取ったオペレーターは、用紙バージョンのフォームを取得し、このフィールドに対応するフィールド(DBEdit)を探すことを余儀なくされます。 SQLクエリ(上記参照)のStringListのMemoのメッセージ行をダブルクリックすると、このクエリのすべてのチェックされたフィールドの名前が書き込まれます。 つまり 記入エラーが発生したフィールドの名前はすでにあります。 これらのフィールドに関連付けられているDBEditコンポーネントを見つけて強調表示する必要があります。



Inovet ©   (2013-02-04 16:55) [3]

DataSetレベルで確認しますか? その中で、編集のためにフィールドに接続されているものを見ることができます。



Александр_2012   (2013-02-04 17:01) [4]


>イノヴェート©(04.02.13 16:55)[3]
>
> DataSetレベルで確認しますか? その中であなたはそれを見ることができます
>編集のためにフィールドに接続されています。

理解されていない。 たとえば、私のTOVARフィールドはDBEdit25コンポーネントに関連付けられています。 TOVARフィールドが誤って入力されているという情報を取得したので、DBEdit25が配置されているページを見つけて強調表示する必要があります。 DataSetはこれを知っていますか?



sniknik ©   (2013-02-04 17:17) [5]

プロシージャTForm1.DBEdit1Change(送信者:TObject); ベギン TDBEdit(Sender)で [6..16]のField.AsIntegerの場合 次に色:= clRed 他の色:= clWindow; 終わり;



Плохиш ©   (2013-02-04 17:20) [6]

TDBEdit.Field-編集コントロールが接続されているリクエスト内のフィールド。
TDBEdit.DataSource-編集項目のデータソース。



Игорь Шевченко ©   (2013-02-04 17:25) [7]


> DataSetはこれについて知っていますか?


TField.FocusControl?



Александр_2012   (2013-02-04 17:32) [8]


>プロシージャTForm1.DBEdit1Change(送信者:TObject);
>はじめに
> TDBEdit(送信側)で
> [6..16]のField.AsIntegerの場合
>次に色:= clRed
> else Color:= clWindow;
>終わり。
>


うーん。 私はおそらくコードを理解していませんでした。 または私を理解していません。 私が使用しているDBフィールドごとに、値の有効範囲を確認する。 SQLクエリによって実装された、XNUMXつのフィールドの有効な値に関するチェックもあります(他のフィールドが特定の値をとった場合)。 フィルターとして実装することは困難または不可能です。 依存関係は、実際にはデータベースのXNUMXつまたはXNUMXつ以上のフィールドの間にある可能性があります。
プログラムでDBEditタイプのコンポーネントを検索する必要があります。これには、正しく入力されていないデータベースフィールドが関連付けられています。 ここではFindComponentのようなものがより適しているように見えますが、まだ実装方法がわかりません。



Игорь Шевченко ©   (2013-02-04 18:03) [9]


>ここではFindComponentのようなものがより適しているように思えますが、
>しかし、これを実装する方法がわかりません。


RTFS:DBCtrls.pas、FocusControl



sniknik ©   (2013-02-04 18:14) [10]

>おそらくコードを理解していません。
そして、あなたは少し「コードにこだわる」。

>または私を理解していません。
あなたを理解することは不可能です、あなたは言葉で話します。 あなたはコードを理解することができます。 (単語は、最終的に同じことを行うさまざまな実装の集まりです)

>範囲の検証
ここでは範囲は重要ではありません(まあ、いくつかの条件を設定する必要がありました)が、この例の考え方は、すべてをXNUMXつのハンドラーで確認する必要はないということです。リクエスト(不採算になりますが、一度リクエストしてから結果を確認する方が簡単です)



sniknik ©   (2013-02-04 18:18) [11]

理解のための別の条件...
プロシージャTForm1.DBEdit 25変更(送信者:TObject); ベギン TDBEdit(Sender)で Field.FieldName = "TOVAR"の場合 次に色:= clRed 他の色:= clWindow; 終わり;



Inovet ©   (2013-02-04 19:57) [12]

> [8] Alexander_2012(04.02.13 17:32)
>別のフィールドが受け入れた場合、XNUMXつのフィールドの許容値について
>特定の値。
...
>プログラムでコンポーネントを検索する必要がある
>タイプDBEdit

プロシージャTForm1.DataSet1BeforePost(DataSet:TDataSet); ベギン if(DataSet1Field1.AsInteger = 1)および(DataSet1Field2.AsString <> "a")の場合 ベギン DBEdit1.Color:= clRed; DBEdit2.Color:= clRed; 終わり そうしないと ベギン DBEdit1.Color:= clWindow; DBEdit2.Color:= clWindow; 終わり; 終わり;
または、必要に応じて、ループで

for i = 0 to ControlsCount-1 do

Controls [i]がTDBEditに属していることを確認してから、それが目的のフィールドに接続されているかどうかを確認し、色を変更します。 しかし、コントロールがすでにあなたに知られているのに、なぜそんなに難しいのですか?



Dennis I. Komarov ©   (2013-02-04 22:24) [13]

オブジェクトへの参照の配列を保持します。この番号は、Memo ...(またはより優れたTListView)の行に一意に対応します。



KilkennyCat ©   (2013-02-04 23:48) [14]


>したがって、オペレーターは「この製品は
>特定の記事「紙のバージョンを強制する
>フォームを作成し、これに対応するフィールド(DBEdit)を探します
>メッセージ


奇妙な論理。 は、いくつかのWebフォームに似ており、入力し、入力し、コードを記述し、次に別のWebフォームを記述し、最初に問題点を報告します。
すぐにチェックした方がいいですか?

まあ、そう-Sniknikaの例



Германн ©   (2013-02-05 01:58) [15]


>プログラムは充填ロジックをチェックします(依存関係は
>データベースのさまざまなフィールド)およびすべてに関するメッセージをメモに表示します
>不整合。 名前が書かれているStringListがあります
>入力ロジックでミスが発生したフィールド。 それ
>すべてが機能します。 メッセージをダブルクリックしたい
>メモで

メモはより適切なものに置き換える必要があります。 これは、各メッセージが別々の行になる場合に適しています。 TListBox、TListViewなど
追加 登録するStringList、一般的には不要です。



Александр_2012   (2013-02-06 12:50) [16]

今日は。

DM.DataQ.FieldByName(masst.Strings [0])を構築します。
Igor Shevchenkoは助言し、機能しましたが、私のマストには、入力エラーが発生する可能性のあるフィールドのリストがあり、このデザインは0つのフィールド(特に[XNUMX]の文字列を示しました)を参照しており、それに焦点を当てていますが、どのように強調表示しますかまた、目的のページでPageControlが開いている場合にのみフォーカスが転送されます。 目的のDBEditはどこにありますか。

テストとして、XNUMXつのページを持つPageControlで構成される単純なプロジェクトを作成し、その上にいくつかのDBEdit、Odacコンポーネントを描画しました。 ボタンとそのようなコードを書いた

procedure TForm1.Button1Click(送信者:TObject);
VAR
i:整数。
始まる
for i:= 1 to OraQuery1.FieldCount do
if TDBEdit(FindComponent( 'DBEdit' + IntToStr(i)))。DataField = 'TOVAR' then
TDBEdit(FindComponent( 'DBEdit' + IntToStr(i)))色:= clRed;
終わり

強打で動作します。 目的のDBEditは、どのページでも強調表示されます。 しかし、それをプログラムに挿入することはできません。 その中で、OdacコンポーネントはDataModule、Memoにあり、エラーメッセージは別のフォーム(InForm)に表示され、DBEditsはメイン(mainForm)フォームにあります。
メモは次のように入力されます:

プロシージャTDM.DataQBeforePost(DataSet:TDataSet);
VAR
flgerr:ブール値。
始まる
flgerr:= False;
InForm.Memo1.Clear;
DM.LUSを使用する//充填のロジックを確認するためのリクエストとメッセージ
始まる
閉じる
SQL.Clear;
SQL.Add( "lus、mess、fulllusから選択");
開く
終わり
DM.LUS.Eofではありませんが
始まる
DM.Help1で
始まる
閉じる
SQL.Clear;
SQL.Add( "selectポール1、ポール2、ポール3からedds.v_k99");
SQL.Add( "where id =" + DM.DataQ.FieldByName( "id")。AsString);
SQL.Add( "and" + DM.LUS.FieldByName( "lus")。AsString);
やってみる
開く
を除く
ShowMessage( "エラー" +#13 + SQL.Text +#13 +#13 + "LUS" +#13 + DM.LUS.FieldByName( "mess")。AsString);
終了します。
終わり; //試す
終わり; //と
DM.Help1.RecordCount> 0の場合
始まる
flgerr:= True;
InForm.Memo1.Lines.Add( "***" + DM.LUS.FieldByName( "mess")。AsString + "***");
InForm.Memo1.Lines.Add( "");
終わり
DM.LUS.Next;
終わり
InForm.Show;
flgerrの場合は中止します。
終わり

プロシージャTInForm.Memo1DblClick(送信者:TObject);
VAR
st、buf:文字列;
i、j:整数;
masst:TStringList;
masnpol:TStringList;
始まる
masst:= TStringList.Create;
masnpol:= TStringList.Create;
DM.LUSで
始まる
閉じる
SQL.Clear;
SQL.Add( "select * from tavary");
SQL.Add( "where 2 <1");
開く
終わり
for i:= 0からDM.LUS.FieldCount-1まで
masnpol.Add(DM.LUS.Fields [i] .FieldName);
st:= Memo1.Lines [Memo1.CaretPos.Y];
削除(st、1,4); //メッセージの最初と最後の余分な文字を削除します
削除(st、長さ(st)-3,4、XNUMX);
DM.LUSで
始まる
閉じる
SQL.Clear;
SQL.Add( "lusからlusを選択");
SQL.Add( "where mess =" "" + st + "" "");
開く
終わり
st:= DM.LUS.FieldByName( "lus")AsString;
for i:= 0からlength(st)do
st [i] in ["("、 ")"、 "="、 ">"、 "<"]の場合
st [i]:= "";
繰り返す
st:=トリム(st);
st <> ""の場合
始まる
Pos( ""、st)> 0の場合
始まる
buf:= UpperCase(コピー(st、1、Pos( ""、st)-1));
削除(st、1、Pos( ""、st)-1);
終わり
それ以外の
始まる
buf:= st;
st:= "";
終わり
if(masnpol.IndexOf(buf)<>-1)および(masst.IndexOf(buf)=-1)then
masst.Add(buf);
終わり
st = ""まで;
for i:= 0 to masst.Count-1 do
for j:= 1 to 247 do // DBEditにバインドされた247フィールドがあります
//これを変更するには???
if TDBEdit(FindComponent( 'DBEdit' + IntToStr(j)))。DataField = masst [i] then
TDBEdit(FindComponent( 'DBEdit' + IntToStr(j)))色:= clRed;
// 247をハード設定する代わりに、プログラムで使用されるDBEditsの数をプログラムで決定する方法は?

masst.Free;
masnpol.Free;
終わり

Memo1行をダブルクリックすると、XNUMXつの入力エラーの関連フィールドがすべて強調表示され、次の行をそれぞれダブルクリックすると、他の入力エラーのすべての関連フィールドが強調表示されるようになっています。



Александр_2021   (2013-02-06 22:46) [17]


QuotedXNUMX >>または私を理解していませんでした。
>理解できない、言葉を言う あなたは理解できる
>コード。 (単語は、最終的に作るさまざまな実装の束です
>同じこと)
>


Ledコードと沈黙...



anonimus   (2013-02-07 09:00) [18]


>コードと沈黙をもたらした...

人々(プログラマーを含む)は自分のビジネスを持っています

FindComponent F1

>かどうかを示します 指定されたコンポーネントは所有されています を通じて、タンピングされたコーヒーベッドの上から均一にフィルターバスケットの内の粉に浸透していきます。
>コンポーネント。

あなたは彼らが(正しい形で)どこにいるかを見る必要があります!
も参照してください コンポーネント[]

>コンポーネントが所有するすべてのコンポーネントを一覧表示します。


> for j:= 1 to 247 do // DBEditにバインドされた247フィールドがあります

そして、ナンバリングがノックダウンされたら? (5番目を追加し、2番目を削除)。

> //使用するDBEditの数をプログラムで決定する方法
> 247のハード設定の代わりにプログラムで?


も参照してください 部品

>コンポーネントが所有するコンポーネントの数を示します。
>

>



Кщд   (2013-02-07 09:58) [19]

>アレクサンダー_2021(06.02.13/22/46 17:XNUMX)[XNUMX]
OFOMSまたは保険?



sniknik ©   (2013-02-07 10:42) [20]

>>コードと沈黙をもたらした...
>人々(プログラマーを含む)は自分のビジネスを持っている
また、プログラマーも「bzikami」を持っている人です。

たとえば、私がこのコードを気にしていないのは、「最高の例(IMHO)...を「copy-paste」属性ではなくロジックによってすでに示したときです。
そして、私はその開発を期待しており、「ロックされたゲートの突合せ」の著者からの継続ではありません。 さて、何のために? 開いているとき。 外から任命したいですか? はい、問題なく、配列/一連のシリアル番号または「間違った」のフィールド名を「側から」割り当て、コンポーネント自体のエントリを確認します(たとえば、単に現在のレコードを見つけるために検索関数を呼び出すことによって、エレメンタリでイベントを開始します)。 小学校。 検索はありません...検索に失われませんでした。
私は以前にそれを示したでしょうが、彼の何が問題だったのか(現在は問題ではない)、または「私の」方法が著者に適さない理由が議論された可能性があると述べたのは、それが適切であるかどうかです。 そして、なぜ作者にとっても話すことがより正しいように思われるのか。 だから、いや、狩りはしません。



Александр_2012   (2013-02-07 12:06) [21]


> Xydm(07.02.13 09:58)[19]
引用2021 >> Alexander_06.02.13(22/46/17 XNUMX:XNUMX p.m.)[XNUMX]
> OFOMSまたは保険?
> <引用>


私たちはどちらにも属していません。 そして、彼らは通常、プロのプログラマーによって書かれたプログラムを使用します。



Александр_2012   (2013-02-07 14:27) [22]


>スニクニク©(04.02.13 18:18)[11]
>理解のための別の条件...
プロシージャTForm1.DBEdit25Change(送信者:
> TObject); Field.FieldNameの場合、TDBEdit(Sender)で開始します
> = "TOVAR"次にColor:= clRed else Color:= clWindow;
>終わり。


親愛なる スニクニク©。 あなたはあなたがより良い解決策を提案したと書いています。 彼を本当に理解したい...
OnChangeイベントは、DBEditに入力された値が変更されるたびに発生します。つまり、12345を入力する必要がある場合、イベントは5回発生します。 OnChangeでは、入力値の有効性のチェックをコード化へ導入することが可能ですが、これは妥当ですか? OnExitをチェックしたら、12回限りのチェックで問題を解決し、必要に応じてエラーメッセージを表示して、入力フォーカスを返すことができます。 これは私と一緒に行われます。 次に、たとえば、コディファイアに値1が含まれていて、ユーザーが値を入力し始めると、入力XNUMXでエラーメッセージ(OnChange時)を受け取ります。 いいですか? OnChangeで他のフィールドが特定の値を受け取っている場合、一方のフィールドの特定の値を入力することが可能かどうかを確認することは一般的に意味がなく、フィールドのXNUMXつがまだ入力されていない場合はどうなりますか? nullまたはnullのチェックを追加しますか? しかし、すでに書いたように、依存関係はXNUMXつのフィールド間だけでなく、XNUMXつとXNUMXつの間にも存在する可能性があります。 この場合、最も簡単な解決策は、BeforePostでSQLクエリを使用してチェックすることです。 すべてのエラーメッセージはメモの別のフォームに表示されます。 タスクは私にとって完全に機能します。 エラーメッセージをダブルクリックすると、メインフォームにバックライト付きのDBEditsが表示され、このエラーに関連しているため、ユーザーが自分のエラーかどうかを確認できます(ユーザーが間違ったエラーまたは間違ったエラーを引き起こした)。 それでも、データベースのデータは紙から入力されており、それらを記入した人もまた人であり、間違いである可能性があるため、誤った情報も保存され、紙を提供した人は訂正の必要性について警告されます。 オペレーターは単に入力するだけで、実際に何を設定する必要があるかを知ることができません。


>例えば、私がすでに持っていたとき、私は今このコードを気にしません
>最良の例(IMHO)...ロジックによる


難しいことではない場合は、ロジックを説明してください。



sniknik ©   (2013-02-07 15:27) [23]

> DBEditに値が入力されるたび
だから何? コンピュータチックを保存しますか? (ティックではなく、目で確認できるように)遅くならない場合は、プロセスを2から2000回実行しても問題はありません(コンピュータが過去XNUMX世紀のものであっても、モニタの前にメインの「ブレーキ」を手動で入力した場合...)

>次に、入力1でエラーメッセージ(OnChange時)を受け取ります。 いいですか?
背景を誤って変更しても、メッセージはありません。

>依存関係はXNUMXつのフィールド間だけでなく、XNUMXとXNUMXの間にも存在します。
それは素晴らしいことです。あなたはそれを変更し、すぐにこれらのアクションの壊れた「チェーン」を見るでしょう。

>したがって、誤った情報も保存されます
チェックは保存ではありません。彼についての話はまだありません。何も妨げられず、「マイ」バージョンでは、「バギー」エントリに関係なく保存します。

>次にロジックを説明します。
「メモ」で延期せずに、テスト結果をすぐに確認して表示します(メモを残すことはできません。「履歴」が続くので、コンポーネントの出力でそこに書き続けることもできます)。



Александр_2012   (2013-02-07 15:47) [24]


quotedXNUMX >>依存関係はXNUMXつのフィールド間だけでなく、
>およびXNUMXとXNUMX。
>それは素晴らしいです、あなたは一つを変えて、すぐに壊れたのを見ます
>これらのアクションからの「チェーン」。


まあ...それはいいですね。 SQLクエリの形式でフィールド間の依存関係をチェックするための約60のオプションがあります。 それら。 (データの入力時に)押すたびに、これらの60のクエリが実行されますか? そして、残念ながら、私はコンポーネントがどのように機能するのか本当に理解していませんが、Postが機能していない場合、SQLクエリを使用してデータベースにアクセスするのは無意味なようです。 データベースに古いデータまたはまだ空のデータが含まれている-ここを確​​認するにはどうすればよいですか? (または私は間違っていますか?)



Inovet ©   (2013-02-07 15:49) [25]

> [22] Alexander_2012(07.02.13 14:27)
>エラーメッセージを発行し、入力フォーカスを返す

クリンチに入ります。

> [22] Alexander_2012(07.02.13 14:27)
> BeforePostでSQLクエリを使用して確認します。

したがって、検証のためのすべての情報は管理されています。 それともすでになくなっており、一部がデータベースに保存されていますか?



KilkennyCat ©   (2013-02-07 16:06) [26]


> OnChangeイベントは変更のたびに発生します
> DBEditに入力された値、つまり、入力する必要がある場合
> 12345、イベントは5回発生します


ハンドラに何も記述しなくても、とにかく起こります。



sniknik ©   (2013-02-07 16:17) [27]

>検証のためのすべての情報は管理されています。
それ 〜すべき コントロール内にある場合、そうでなければ「コンサバトリー」で何かが間違っている、それは部分的に書かれているか、以前に入力されたものに依存していることが判明します。 ...まあ、一般的に想像することは可能ですが、たぶん、ここでは、そのような場合はどうでしょうか。 これはどの投稿から読むことができますか?

「オンサイト」が怖い場合は、イベントを追加してブロードキャストで送信できます(ただし、コンポーネントが散在しているすべてのパネル/フォームを通過するか、レコードセットによって開始された「アナログ」を考案する必要がありますが、すでに困難です)。



sniknik ©   (2013-02-07 16:20) [28]

>まあ、想像することは可能ですが、おそらく
一般に、それが重要な場合。 一方が他方に依存している、チェックがサーバー上で行われる、またはデータベースがローカルである(そして、押された各ボタンの再要求に問題がないはずです)。



Александр_2012   (2013-02-07 16:22) [29]


>キルケニーキャット©(07.02.13 16:06)[26]
>
>> OnChangeイベントはすべての変更で発生します
>
>> DBEditに入力された値、つまり、入力する必要がある場合
>
>> 12345、イベントは5回発生します
>
>
>ハンドラーにいても、とにかく発生します
>何も書きません。


私はこれを理解していますが、クリックごとに約60のSQLクエリが実行される場合... BeforePostで一度チェックが行われ、コンピュータは約0,5秒間考えます。 データベースには10桁のフィールドがあります。フィールドの入力は50〜60秒遅れますか?



Inovet ©   (2013-02-07 16:26) [30]

> [29] Alexander_2012(07.02.13 16:22)
>しかし、各プレスで約60が実行されます
> SQLクエリ...

この瞬間を明確にします。



sniknik ©   (2013-02-07 16:27) [31]

>約60のSQLクエリが実行されます...
何のために? 60ものリクエストを行うには、どのようなチェックが必要ですか??? 入力されたものが一般にデータベースに格納されているものに依存するのはなぜですか?



Александр_2012   (2013-02-07 16:49) [32]

説明する方法? ここで実行中のすべてのクエリを発行する場合のみですか?


>なぜ? どのようなチェックが必要か
> 60リクエスト??? 入力した理由は一般的に保存された
>データベース内?


これらのクエリでは、フィールド1に2が含まれ、フィールド2に5または7が含まれ、フィールド4にのみ8が含まれる場合に型の依存関係がチェックされますが、別のリクエストのフィールド1は他のフィールドに関してチェックできます。 これは思いつきませんでした。 彼らは上から論理的な条件で順序を下げました。 ...論理的には、すべてが正しいです。
データベースに何が格納されているかには依存しませんが、DBEdit.Textをクエリしても意味がありません。 クエリはデータベーステーブルでのみ機能します。 私は主張しませんが、おそらく何が理解できないのでしょうか。しかし、いずれにせよ、DBEditの値を明らかにテーブルにないように変更し、保存せずにこの値のリクエストを発行しようとすると、応答がゼロになる(解決するまで)役職)。 また、文字列インタープリターを作成して、外部ファイルからのチェックのいくつかの行を分析します。 これはさらに悪いことです。



KilkennyCat ©   (2013-02-07 16:50) [33]

すべてが非常に厳格な場合、最初にリクエストですべてのルールを取得せずに、コンプライアンスをチェックするのはなぜですか?



Александр_2012   (2013-02-07 16:52) [34]

PS 60チェック-これは約250のフィールド間の異なる比率用です



sniknik ©   (2013-02-07 17:22) [35]

> 60チェック-これは約250のフィールド間の異なる比率用です
それら。 ほとんど何もない...(真剣に、リクエストあたり数ミリ秒)。 さらに、データは一度だけではなく、起動時にダウンロードされ、使用される入力の数に関係なく確認できます。 すべてが整合性と他のデータベースルールの1つであるように思われます(くしゃみをするように思われます(説明に応じて、場合によっては、サーバーをチェックし、挿入手順をトランザクションに記述してください...さもなければ、状態の変化の瞬間は監視されません)。入力、リクエスト、チェックOK、つまり記録できますが、データベースのこの時点で条件が変化します...)。



Anatoly Podgoretsky ©   (2013-02-07 17:43) [36]


>スニクニク©(07.02.13 15:27)[23]

鳥、チックのために申し訳ありません



Inovet ©   (2013-02-07 21:25) [37]

> [32] Alexander_2012(07.02.13 16:49)
>説明する方法は? ここですべてを実行して発行する場合のみ
>リクエスト?

保存してから、データベースから確認してください。 直接記入するときにチェックが気に入らないのは何ですか? ユーザーによって入力された値またはデータベースから読み取られた値の組み合わせを60回チェックする関数を記述し、少なくともOnAfterScroll、少なくともOnBeforePost、少なくともOnChangeで強調表示しますが、XNUMXつすべてでより優れています。 アドバイスに従って、リクエストを使用してサーバーを確認します。



Алексндр_2012   (2013-02-08 09:41) [38]

良い一日。 参加してくれてありがとう、私は解決策をさらに探します。本当にそれを終えたいです。

私の小切手はBeforePostに送られます。 同時に、データはすでにテーブルに入力されていますが、Abortコマンドを発行することにより、最終保存を中断できます。

//これを変更するには???
if TDBEdit(FindComponent( 'DBEdit' + IntToStr(j)))。DataField = masst [i] then TDBEdit(FindComponent( 'DBEdit' + IntToStr(j)))Color:= clRed;

あるフォームから別のフォームに関連して動作するように変更する方法を教えていただければ、すばらしいでしょう(DBEditは同じフォーム上にあり、メモXNUMXつの行をOnDblClickイベントにバインドしたいと思います。



Алексндр_2012   (2013-02-08 09:59) [39]

別の形で。

保存してから、データベースから確認してください。 直接記入するときにチェックが気に入らないのは何ですか? ユーザーによって入力された値またはデータベースから読み取られた値の組み合わせを60回チェックする関数を記述し、少なくともOnAfterScroll、少なくともOnBeforePost、少なくともOnChangeで強調表示しますが、XNUMXつすべてでより優れています。

なぜなら 将来的には、チェックの条件やその数が変わる可能性があります。テーブルに新しい条件を入力してチェックするだけで十分です。関数を作成する場合は、関数を書き直してタスクを再コンパイルする必要があります。 )



sniknik ©   (2013-02-08 10:25) [40]

>あるフォームから別のフォームに関連して作業した
このフォームの表示はForm25.FindComponentです。これについて話している場合、疑いを持ちます...積分について考え、算術演算がどのように機能するかを尋ねます。

>次に、それを書き直してタスクを再コンパイルする必要がありますが、これはあまり便利ではありません(提案を正しく理解していれば)。
nda ...ああ、どれほど詳細に彼らがどれほど熱心に証明したかを詳しく聞いた...「コンパイルなし」、「便利」、「修正のための最小」など その結果、「ロジックの中断」(プログラムの一部、データベースの一部)を使用して書き込むと、常に「あちらこちら」の編集が行われました。
プログラムまたはデータベースのいずれかで。 データベースにある場合、プログラムからチェック全体(トリガー/プロシージャ)をそこに転送し、受け入れを保存して処理します。 強調表示するには、検証手順を追加する必要があります。 ベースにあります。 その実装の結果に応じて強調表示します。



Алексндр_2012   (2013-02-08 11:53) [41]

Form25.FindComponent

以前考えましたが、コンパイルするとUndeclared identifireメッセージ「TDBEdit」が表示されます。 DBCrlsライブラリのコンパイルパスが追加されましたが、プログラムが実行されると

for I:= 0 to masst.Count-1 do
jの場合:1から247まで
if TDBEdit(Main.FindComponent( 'DBEdit' + IntToStr(j)))。DataField = masst [i] then TDBEdit(Main.FindComponent( 'DBEdit' + IntToStr(j)))Color:= clRed;
次に、Projectがメッセージ「excepttion class EAccessViolation withaddress "Access violation at address 004B7038 ln module progr.exe。Read of address 00000240.」というメッセージでプログラムがクラッシュします。 プロセスが停止しました。
しかし、ここに間違いがあります...



sniknik ©   (2013-02-08 12:32) [42]

http://delphimaster.net/view/15-1360134224/



sniknik ©   (2013-02-08 12:35) [43]

より具体的
http://www.gunsmoker.ru/2009/05/access-violation.html
ZZZが小さい場合は、nilに等しいリンクにアクセスしています



sniknik ©   (2013-02-08 12:36) [44]

「見つかった」コンポーネントのチェックはありません。



Inovet ©   (2013-02-08 13:37) [45]

一般的に、ユニットの数に接続することは信頼できません。 別の名前を付けるか、すべてを変更します。 私は提案した-フィールドを探して、フィールドへのリンクが食べている。 つまり フィールド名のリストがあり、すべてのコントロールを反復処理するときに対応するフィールド名と一致します。



Inovet ©   (2013-02-08 14:01) [46]

> [38] Alexndr_2012(08.02.13/09/41 XNUMX:XNUMX)
>同時に、データはすでにテーブルに入力されていますが、最後の
>保存は、Abortコマンドを発行することで中断できます。

それらは表にリストされていません。

そして、再コンパイルについて。 ほとんどの場合、フォーム自体が最初に変更され、次に検証の条件が変更されます。 したがって、まだやり直して再コンパイルする必要があります。

また、プログラムを除いて、サーバーに到達するデータ量がわかっている場合は、サーバーとクライアントの両方でチェックを行うことが望ましいです。



Александр_2021   (2013-02-10 22:19) [47]


>イノヴェート©(08.02.13 13:37)[45]
>
>一般に、数字に結びつくことは信頼できません。 あなたに名前を付ける
>それらを別の方法で変更するか、すべてを変更します。 私が提案しました
>-フィールドで検索すると、フィールドへのリンクが食べられます。 それら。 あなたによって
>フィールド名のリストがあり、対応する
>すべてのコントロールの列挙で食べられます。
>

私は同意します、DBEdit番号に添付されるのは悪いことです。 しかし、何かが完全に混乱しました。 もちろん、DBEditはどのフィールドに接続されているかを認識していますが、その逆も同様です。 フィールドをDBEditにマップする方法は?



Игорь Шевченко ©   (2013-02-10 22:45) [48]


>フィールドをDBEditにマップする方法は?


[7]、[9]



Александр_2012   (2013-02-11 12:03) [49]

皆さん、ありがとうございました。 した。 多分正しくないかもしれませんが、それは機能します。

for j:= 0 to masst.Count-1 do
始まる
for i:= 0からMainFormKart.ComponentCount-1まで
始まる
Temp:= MainFormKart.Components [i];
(TempがTDBEdit)および((Temp as TDBEdit).DataField = masst [j])の場合
(TDBEditとしての温度).Color:= clFuchsia;
終わり
終わり

多分誰かが重宝するでしょう。



ページ: 1 2 全枝

フォーラム:「初心者」;
現在のアーカイブ:2013.11.10;
ダウンロード:[xml.tar.bz2];

2階





メモリ:0.82 MB
時間:0.057 c
2-1360084342
Tカウント
2013-02-05 21:12
2013.11.10
VKontakte認証


15-1369034958
> | <
2013-05-20 11:29
2013.11.10
アプリケーションセキュリティ


15-1369427402
陪審
2013-05-25 00:30
2013.11.10
お誕生日おめでとうございます! 25 5月2013土曜日


2-1360307264
カマロ
2013-02-08 11:07
2013.11.10
INを使用したSQLクエリの最適化


2-1359980332
Aleksandr_2012
2013-02-04 16:18
2013.11.10
コンポーネントを見つけて強調表示する方法





アフリカーンス語 アルバニア語 アラビア語 アルメニア語 アゼルバイジャン語 バスク ベラルーシ ブルガリア語 カタルーニャ語 中国語(簡体字) 中国語(繁体字) クロアチア語 チェコ語 デンマーク語 オランダ語 英語 エストニア語 フィリピン語 フィンランド語 フランス語
ガリシア語 ジョージアン ドイツ語 ギリシャ語 ハイチ語 ヘブライ語 ヒンディー語 ハンガリー語 アイスランド語 インドネシア語 アイリッシュ イタリア語 日本語 韓国語 ラトビア語 リトアニア マケドニア語 マレー語 マルタ語 ノルウェー語
ペルシア語 ポーランド語 ポルトガル語 ルーマニア語 ロシア語 セルビア スロバキア語 スロベニア語 スペイン語 スワヒリ語 スウェーデン語 タイ語 トルコ語 ウクライナ語 ウルドゥー語 ベトナム語 ウェールズ語 イディッシュ語 ベンガル語 ボスニア語
セブアノ語 エスペラント グジャラート語 ハウサ語 モン族 イボ ジャワ語 カンナダ語 クメール語 ラオ語 ラテン マオリ語 マラーティー語 モンゴル語 ネパール語 パンジャブ語 ソマリ タミル語 テルグ語 ヨルバ語
ズールー語
Английский Французский Немецкий Итальянский ポルトガル語 Русский Испанский