フォームを Delphi ダイナミック ライブラリに保存します。 Delphi アプリケーションに DLL をロードする

17.04.2019 問題点

モジュール式プログラム

プログラムを開発していると、異なることが判明することがよくあります。 ソフトウェアアプリケーション同じオブジェクト、そのプロパティ、メソッド、プロシージャ、および関数が必要です。 たとえば、ほとんどすべてのプログラムは画面上に情報を表示し、標準の Windows インターフェイス オブジェクト (ウィンドウ、ボタン、メニューなど) を使用します。そのような各要素のレンダリング コードをすべてのプログラムに詰め込むのは非常に不合理です。

したがって、大きなプログラムを個別の独立したモジュールに分割するというタスクが発生し、各モジュールには特定のプロシージャと関数のセットが含まれます。 このようなモジュールのプロシージャと関数は、他のプログラムから呼び出すことができます。 このようなモジュールは呼ばれます ダイナミックリンクライブラリ(DLL – 動的にリンクされたライブラリ、図 19.1)。 「動的」という言葉は、ライブラリがコンパイル段階ではなく、プログラムの起動後に組み込まれることを示します。

米。 23.1 DLL - ライブラリ。

DLL ライブラリは、ほとんどのプログラムで広く使用されています。 Windows オペレーティング システム自体に数百の DLL が含まれており、それらに含まれる機能をプログラムで使用して、車輪の再発明を避けることができるとします。

DLL はどのような場合に使用する必要がありますか? まず、複数の独立したプログラムを開発していて、それらが同じフラグメントを使用している場合 プログラムコード。 次に、そのような断片を図書館に持っていく必要があります。 これにより、ディスク領域が節約されるだけでなく、プロジェクトへの変更が容易になります。編集する必要があるのは 1 つの DLL だけであり、多くの exe プログラムを編集する必要はありません。 次に、素晴らしいプログラムのユーザーに、そのプログラムを開発に使用する機会を提供したい場合です。 この場合、プログラムは通常、小さな exe ファイルと大きな DLL ライブラリに分割されます。 DLL に含まれるプロシージャと関数、およびそれらのパラメータの説明を提供する限り、他の開発者はその DLL を使用できます。 一般的に言われているDLLの手続きや機能は、 輸出された他のプログラムへ。

環境の中で Delphi プログラミング DLL ライブラリを迅速に作成するための組み込みツールがあります。 具体的には、関数 GetArea(a, b, c: REAL):REAL を含むライブラリを作成しましょう。 この関数は、三角形の辺の長さを入力として受け取ります。 この関数は、指定された三角形の面積を返します。

関数 GetArea(a, b, c:REAL):REAL;

結果:=SQRT(p*(p-a)*(p-b)*(p-c))

私たちは Delphi を起動し、型破りな行動をとります。 メニュー項目「ファイル」→「新規」→「その他」を選択し、開いたウィンドウの「新規」タブで「DLL ウィザード」アイコンをクリックします。 これにより、テンプレート DLL ファイルが作成されます。 これは通常の Delphi ユニットに非常に似ていますが、Library ステートメントで始まります。 DLL が将来受け取る名前、たとえば GetA でプロジェクトを保存します。 GetArea という名前は使用できません。すでに関数名に使用されています。

ここで、USES 演算子の後に関数のテキストを記述しますが、ヘッダーにいくつかの変更が加えられています。

関数 GetArea(a, b, c:REAL):REAL; 輸出; 標準呼び出し;

EXPORT キーワードは、関数がエクスポート可能であり、次の場所から参照できることを示します。 外部プログラム。 STDCALL (標準呼び出し - 標準呼び出しモデル) という単語は、関数にパラメーターを渡すために使用されるプロトコルを示します。 標準の呼び出しモデルは、他の言語、特に C で書かれたプログラムと互換性があるため、C プログラマーも当社の DLL を使用できます。

関数のテキストの後に追加します

EXPORTS ステートメントは、ライブラリからエクスポートされたすべてのプロシージャと関数をリストします。 これは私たちの図書館のカタログのようなものです。

ライブラリを実行することはできず、コンパイルのみが可能です。 これを行うには、「プロジェクト」→「ビルド」メニュー項目を選択します。 すべてが正しく行われた場合、geta.dll という名前のファイルが現在のディレクトリのディスク上に作成されます。 ここは私たちの図書館です。

重要な注意点: ライブラリ内にあるプロシージャや関数にパラメータを渡すときは、ある種の微妙な点があります。 文字列型。 STRING 型のパラメータを渡せるようにするには、ライブラリとそれを呼び出すプログラムの両方の USES ステートメントで ShareMem モジュールの接続を指定し、さらにこのモジュールがリストの最初に表示されるようにする必要があります。 。 さらに、ライブラリとともに、ファイル borlndmm.dll (Delphi ディストリビューションに含まれています) を含める必要があります。 このような面倒な作業を回避するのは非常に簡単です。テキスト型パラメータの場合は、ShortString (基本的には通常の文字列ですが、長さは最大 255 文字) および PChar (テキスト文字列へのポインタ) データ型を使用する必要があります。

Delphi で新しい DLL を作成するには、メニュー コマンドを選択します。 ファイル > 新規 > その他。 パネル内 アイテムのカテゴリ新しいアイテムノードを選択 デルフィプロジェクトを選択し、要素をダブルクリックします。 ダイナミックリンクライブラリウィンドウの右側のペインにあります。

マスター DLLウィザードとほぼ同じように見えるメイン DLL ソース コード ファイルを作成します。 ソース、通常のアプリケーション用に生成されます。 唯一の違いは。 このファイルが予約語で始まっていること 図書館、 だがしかし プログラム.

ライブラリプロジェクト1; ( DLL メモリ管理に関する重要な注意事項: DLL が文字列をパラメータまたは関数として渡すプロシージャまたは関数をエクスポートする場合、ShareMem はライブラリの USES 句およびプロジェクト (プロジェクトビュー ソースを選択) の USES 句の最初のユニットである必要があります。これは、DLL との間で送受信されるすべての文字列に適用されます。ShareMem は、BORLNDMM.DLL 共有メモリ マネージャーへのインターフェイス ユニットであり、BORLNDMM を使用して展開する必要があります。 .DLL、PChar または ShortString パラメーターを使用して文字列情報を渡します) (DLL メモリ管理に関する重要な注意事項: ShareMem モジュールは、ライブラリの uses ステートメントおよびプロジェクトの uses ステートメントの最初のモジュールである必要があります ([プロジェクト] -> [ソースの表示] メニュー コマンドを選択します) ) (プロジェクト -> ソースの表示))、DLL がパラメーターまたは関数の結果として文字列を渡すプロシージャまたは関数をエクスポートする場合。 これは、DLL との間で送受信されるすべての文字列、さらにはレコードやクラス内にネストされた文字列にも適用されます。 ShareMem モジュールは管理インターフェイス モジュールです 共有メモリ BORLNDMM.DLL。DLL と一緒に展開する必要があります。 BORLNDMM.DLL の使用を回避するには、PChar または ShortString パラメーターを使用して文字列情報を渡します。 ) SysUtils、クラスを使用します。 ($R *.res) 開始終了。

ここで必要なのは、ブロックの前にサブルーチンを追加することだけです 始まりと終わり、 それだけです。 これにより、DLL では使用できるが、外部アプリケーションでは使用できない内部ルーチンが作成されます。 他のアプリケーションや DLL からルーチンを呼び出したい場合は、それをエクスポートする必要があります。 ルーチンを名前でエクスポートするには、それをリストに追加します 輸出。 リスト 輸出構文は list と同じです 用途、リストにあるものを除く 輸出どの要素もモジュールではなくサブルーチンです。

リスト 輸出通常はブロックの直前に配置されます 始まりと終わり。 リスト 1 を見てください。簡単なライブラリのソース コードが示されています。 FirstLib.dll、1 つの関数をエクスポートします。

リスト 1. 単純な DLL

ライブラリFirstLib; 関数 Max3(Num1, Num2, Num3: 整数): 整数; 標準呼び出し; 開始結果:= Num1; Num2 > Result の場合、Result:= Num2; Num3 > Result の場合、Result:= Num3; 終わり; ( Max3 関数のエクスポート ) Max3 をエクスポートします。 始まり終わり。

リストにルーチンを追加するとき 輸出, これにより、サブルーチンを名前でエクスポートすることになります。 ディレクティブを使用して、ルーチンを別の名前でエクスポートすることもできます。 名前またはディレクティブを使用して序数値を介して 索引。 ただし、ディレクティブを適用する 索引お勧めしません。

以下は、序数値または別の名前を使用してディレクティブをエクスポートする例です。

Max3 名「MyMax3Function」、SaySomething インデックス 1 をエクスポートします。

静的ロードは、DLL をロードする 2 つの方法のうち最も簡単な方法です。 静的読み込みは、起動時の動的接続とも呼ばれます ( ロード時の動的リンク) 使用される DLL はアプリケーションの起動時に自動的にロードされるためです。

DLL を静的にロードするには、ルーチン宣言と呼び出しアプリケーションをコピーし、ディレクティブでマークする必要があります。 外部のこれは、ルーチンがオブジェクト ファイルまたは DLL のいずれかにあることをコンパイラに伝えます。

DLL からルーチンをインポートするときは、ディレクティブでルーチンをマークする必要があります。 外部のの後に、ルーチンの実装を含む DLL の名前が続きます。 以下は関数をインポートする例です。 マックスゼット図書館から FirstLib.dll:

関数 Max3(Num1, Num2, Num3: 整数): 整数; 標準呼び出し; 外部「FirstLib.dll」;

必要に応じて、サブルーチンのインポート中にサブルーチンの名前を変更することもできます。 これを行うには、サブルーチンを別の名前で宣言し、宣言の最後にディレクティブを使用して元の名前を指定する必要があります。 名前:

関数 Max(Num1、Num2、Num3: 整数): 整数; 標準呼び出し; 外部「FirstLib.dll」名「Max3」;

DLL から関数をインポートすることもできます。 これを行うには、インポート モジュールを作成し、セクションに標準のサブルーチン ヘッダーを記述する必要があります。 インターフェース、その外部実装はセクションにあります 実装このモジュール。 リスト 2 は、ライブラリ インポート モジュールの完全なコードを示しています。 FirstLib.dll.

リスト 2. FirstLib.dll ライブラリ インポート モジュール。

ユニットFirstLibInf; インターフェース関数 Max3(Num1, Num2, Num3: 整数): 整数; 標準呼び出し; 実装 const FirstLib = "FirstLib.dll"; (コンパイラには、Max3 関数の実装が FirstLib.dll ライブラリにあることが通知されます) function Max3; 外部FirstLib; 終わり。

DLL とそのインポーターを作成した後、DLL をテストして確認します。 ルーチンがうまく機能していること。 DLL 自体を実行することはできないため、DLL にアクセスするテスト アプリケーションを作成する必要があります。 これを最も速く行う方法は、次の追加を行ってプロジェクト グループを作成することです。 新しいプロジェクト現在のプロジェクトに。 これを行うには、クリックする必要があります 右クリック要素上にマウスを置く プロジェクトグループ1窓の中で プロジェクトマネージャー(プロジェクト マネージャー) を選択し、コンテキスト メニューからコマンドを選択します。 新しいプロジェクトを追加、図に示すように。 1.

リスト 3. FirstLib.dll からインポートされた Max3 ルーチンのテスト。

ユニットユニット1; インターフェイスは Windows、メッセージ、SysUtils、バリアント、クラス、グラフィックス、コントロール、フォーム、ダイアログ、FirstLibInf、StdCtrls を使用します。 type TMainForm = クラス(TForm) Edit1: TEdit; 編集2: TEdit; 編集3: TEdit; ラベル 1: T ラベル; ラベル 2: T ラベル; ラベル 3: T ラベル; Max3Button: TButton; プロシージャ Max3ButtonClick(送信者: TObject); private (プライベート宣言) public (パブリック宣言) end; var MainForm: TMainForm; 実装 ($R *.dfm) プロシージャ TMainForm.Max3ButtonClick(Sender: TObject); var LargestNumber: 整数; begin LargestNumber:= Max3(StrToInt(Edit1.Text), StrToInt(Edit2.Text), StrToInt(Edit3.Text)); MessageDlg(Format("最大数: %d.", ), mtInformation, , 0); 終わり; 終わり。

参考文献: The Inner World Borland Delphi 2006、Ivan Chladni。

親愛なる同僚の皆さん!

この記事では、次のような質問に答えていきます。 DLL? それはなんのためですか? そしてその作成方法と使用方法 DLL助けを借りて デルフィ.

DLLとは何ですか?

ダイナミックリンクライブラリまたは略して DLLは、他のプログラムで使用するためのデータまたは関数のセットを含むライブラリです。

使用分野:

  • リソースのストレージ: アイコン、サウンド、カーソルなど。 リソースを 1 つのライブラリに結合することで、実行可能ファイルのサイズを節約します。
  • 個々のプログラム モジュールとインターフェイス フォームの配置。 アプリケーションを部分的に更新する機会が得られます。 動的接続、メインプログラムを再起動せずにモジュールを更新することができます。
  • プラグイン(PlugIn)として使用します。 メインのプログラム コードを書き換えることなく、アプリケーションの機能を拡張する機会を提供します。
  • ライブラリを使用できるのは、 さまざまな言語プログラミングは、書かれた言語に関係なく。

独自の DLL を作成します。

ライブラリを作成するには、メニューに移動します ファイル -> 他のそして選択してください デルフィプロジェクト -> ダイナミックリンクライブラリ.
ライブラリを作成するためのテンプレートを含むコード テキストが開きます。

ライブラリプロジェクト1; System.SysUtils、System.Classes を使用します。 ($R *.res) 開始終了。

リソースの配置

メインプログラムで後で使用するアイコンをライブラリに追加しましょう。
プロジェクトにリソースを追加する方法については、この記事で詳しく説明されています。

「プログラムについて」フォームを追加しましょう。
クリック ファイル -> 新しい -> VCLフォーム。 テキストと「OK」ボタンを追加しましょう。

標準を表示する関数を追加しましょう メッセージボックス質問、「はい」、「いいえ」のボタン、およびフォーム内の結果 真実または 間違い.

関数 YesNoDlg(const Question: PChar): ブール値; 標準呼び出し; begin Result:= (MessageBox(0, Question, "確認", MB_YESNO + MB_ICONQUESTION) = ID_YES); 終わり;

キーワードに注目してください 標準呼び出し。 関数を呼び出すときにパラメーターと結果がどのように渡されるかを正確に決定します。 詳細については、通話契約 wiki ページをご覧ください。

メインプログラムのプラグインとして使用されるプロシージャも追加します。 これにより、メイン プログラム メニューに「プログラムについて」ボタンが追加され、作成したウィンドウが開きます。
プロシージャコード:

プロシージャ PlugIn(フォーム: TForm); 標準呼び出し; 変数 i: 整数; mi: TMenuItem; begin for i:= 0 ~ Form.ComponentCount - 1 do begin if (Form.Components[i].ClassName = "TMenuItem") and (Form.Components[i].Name = "miHelp") then begin mi:= TMenuItem .Create(Form.Components[i]); mi.Caption:= "プログラムについて"; mi.OnClick:= fmAbout.onAboutButtonClick; TMenuItem(Form.Components[i]).Add(mi); 出口;

終わり; 終わり; 終わり;プログラムの形式はパラメータとしてプロシージャに渡されます。 「」という名前のメニュー項目があるかどうかを確認します。

miヘルプ
"そしてメニューが見つかったら、それにボタンを追加します。

次に、ライブラリからどの関数とプロシージャを使用できるかを示します。

次の行を追加しましょう。 PlugIn、YesNoDlg をエクスポートします。 -> 関数をコンパイルしましょうプロジェクト 建てる または使用して.
ホットキー DLL.

Shift+F9

コードにエラーがない場合、拡張子が付いたファイルがプロジェクト フォルダーに表示されます。 次に、ライブラリを使用するアプリケーションの作成に進みましょう。ここで、[プログラム] -> [終了] および [ヘルプ] のボタンを持つコンポーネントを追加します。 最後に、名前を設定しましょう - 終わり; 終わり;:

フォームのコードに移りましょう。

ライブラリの関数 DLL次の 2 つの方法で接続できます。
静的— プログラムの開始時にライブラリが接続されます。 ライブラリ名または関数名が見つからない場合、プログラムはエラーを生成し、実行されません。
動的— ライブラリは関数呼び出しの直前または特定のイベント時に接続されます。

静的接続方法を考えてみましょう。

TfmMain = class(TForm) MainMenu: TMainMenu; と入力します。 miプログラム: TMenuItem; miExit: TMenuItem; miHelp: TMenuItem; プロシージャ FormCreate(Sender: TObject); プロシージャ miExitClick(Sender: TObject); プライベート・パブリック・エンド。 プロシージャ PlugIn(フォーム: TForm); 標準呼び出し; 外部「SampleDLL.dll」; 変数...

キーワード 外部のは、この関数が外部ライブラリから接続されていることを示します。

イベントに向けて 作成時フォーム、プロシージャ呼び出しを追加 プラグイン:

プロシージャ TfmMain.FormCreate(送信者: TObject); PlugIn(Self) を開始します。 終わり;

パラメータとして 形状現在のフォームをプロシージャに渡します(キーワード 自己).

プログラムを開始すると、メインメニューの「ヘルプ」セクションに「プログラムについて」項目が表示されます。

動的接続方法に移りましょう。

3 つの関数が必要になります WinApi:

ロードライブラリ
ライブラリをコンピュータのメモリにロードします。 その結果、メモリ内のライブラリへのポインタが返されます。 エラーの場合は0を返します。

LoadLibrary(lpLibFileName: LPCWSTR): HMODULE;

lpLibファイル名— ライブラリファイル名。

GetProcAddress
ライブラリ内の関数を名前で検索します。 結果は関数ポインタになります。 関数が見つからない場合は返されます なし.

GetProcAddress(hModule: HMODULE; lpProcName: LPCSTR): FARPROC;

hモジュール
lpProcName— 関数名。

無料ライブラリ
ライブラリをコンピュータのメモリからアンロードします。 結果は、成功した場合は True、エラーの場合は False になります。

FreeLibrary(hLibModule: HMODULE): BOOL;

hLibモジュール— ロードされたライブラリへのポインタ。

次に、動的メソッドを使用して、リソースとアイコンを取得し、「終了」ボタンに関数呼び出しを追加します。 はいいいえDlgプログラムが閉じられていることを確認します。
次のコードを同じ onCreate イベントに追加します。

プロシージャ TfmMain.FormCreate(送信者: TObject); var DLLHandle: THandle; PlugIn(Self) を開始します。 DLLHandle:= LoadLibrary("SampleDLL.dll"); DLLHandle = 0 の場合、Exception.Create("ライブラリ 'SampleDLL' をインクルードできませんでした!"); が発生します。 Self.Icon.LoadFromResourceName(DLLHandle, "my_icon"); を試してください。 最後に FreeLibrary(DLLHandle); 終わり; 終わり;

そしてイベントに向けて オンクリックメニュー項目「終了」:

プロシージャ TfmMain.miExitClick(送信者: TObject); var DLLHandle: THandle; Dlg: 関数(const 質問: PChar): ブール値; 標準呼び出し; begin DLLHandle:= LoadLibrary("SampleDLL.dll"); DLLHandle = 0 の場合、Exception.Create("ライブラリ 'SampleDLL' をインクルードできませんでした!"); が発生します。 @Dlg:= GetProcAddress(DLLHandle, "YesNoDlg"); を試してください。 Assigned(@Dlg) でない場合は、Exception.Create(""YesNoDlg" という名前の関数がライブラリ "SampleDLL" に見つかりませんでした!") を発生させます。 if Dlg("プログラムを終了しますか?") then Close; 最後に FreeLibrary(DLLHandle); 終わり; 終わり;

すべて正しく記述した場合、プログラムを起動するとフォームのアイコンが変わり、「プログラムについて」ボタンが追加され、クリックするとフォームが表示されます。 について終了ボタンを押すと、プログラムは「プログラムを終了しますか?」と確認を求めます。

この機能の使用例が役立つことを願っています。 DLL図書館。
プロジェクトのソースをダウンロードできます。

Delphi プログラミング環境には、DLL を迅速に作成するための組み込みツールが用意されています。

具体的に関数を含んだライブラリを作成しましょう

GetArea(a, b, c: REAL):REAL。

この関数は、三角形の辺の長さを入力として受け取ります。 この関数は、指定された三角形の面積を返します。

p:=(a+b+c)/2;

結果:=SQRT(p*(p-a)*(p-b)*(p-c))

ローンチDエルフィ、そして型破りな行動をします。 メニュー項目を選択 FイルNえーそれから、Nタブで開くウィンドウ内えー「DLL W」アイコンをクリックしますイザード. (アルゴリズムはバージョンによって異なります)

これにより、テンプレート DLL ファイルが作成されます。 これは通常のモジュールと非常に似ています (ユニット)Dエルフィ、演算子から始まるだけです図書館。 DLL が将来持つことになる名前でプロジェクトを保存します。入手する。 名前GetArea使用できません - すでに関数名が占有しています。

演算子の後に用途関数のテキストを書きますが、タイトルがいくつか変更されています。

関数 GetArea(a, b, c:REAL):REAL;輸出;

EXPORT キーワードは、関数がエクスポート可能であり、外部プログラムから参照できることを示します。

関数のテキストの後に追加します

GetArea;

EXPORTS ステートメントは、ライブラリからエクスポートされたすべてのプロシージャと関数をリストします。 これは私たちの図書館のカタログのようなものです。

ライブラリを実行することはできず、コンパイルのみが可能です。 これを行うには、メニュー項目「プロジェクト」→「ビルド」を選択します。 すべてが正しく行われた場合、geta.dll という名前のファイルが現在のディレクトリのディスク上に作成されます。 ここは私たちの図書館です。

重要な注意点注: STRING 型のパラメータをライブラリ内のプロシージャや関数に渡すときは、ある程度の注意が必要です。

STRING 型のパラメータを渡せるようにするには、ライブラリとそれを呼び出すプログラムの両方の USES ステートメントで ShareMem モジュールの接続を指定し、さらにこのモジュールがリストの最初に表示されるようにする必要があります。 。 さらに、ライブラリとともに、ファイル borlndmm.dll (Delphi ディストリビューションに含まれています) を含める必要があります。 この状況を回避するのは簡単です。テキスト型パラメータの場合は、ShortString データ型 (これは通常の文字列ですが、長さは最大 255 文字) と PChar (テキスト文字列へのポインタ) を使用する必要があります。

DLLを呼び出す

DLL からプロシージャと関数を呼び出すには 2 つの方法があります。 最初のケースでは、プログラム開発の段階で、どの DLL に接続するかが事前にわかっています (ほとんどの場合、この DLL は自分で作成します)。 2 番目のケースでは、「外部」ライブラリを含む任意のライブラリに接続します。

静的リンク

最初のメソッドを実装するには、 静的リンク、新しい通常のアプリケーションを作成し、3 つの入力フィールド LabeledEdit1...LabeledEdit3、ボタン、および Tlabel コンポーネントをフォームに配置します。 IMPLEMENTATION ステートメントの後に、getArea 関数を geta.dll ライブラリからインポートする行を追加します。

関数 GetArea(a,b,c:real):REAL; 遠い; 外部「下駄」。

EXTERNAL という単語は、この関数の本体が指定された名前のライブラリにあることを示し、FAR という単語は、「長い」4 バイト アドレスの使用を指定します。これは次の理由で必要です。 呼び出しプログラムはメモリの 1 ページにあり、DLL は別のページにあります。 もちろん、geta.dll ファイルは、現在のアプリケーションのすべてのファイルが配置されているのと同じディレクトリに配置する必要があります。

ボタン クリック ハンドラーでは、配列を作成してライブラリ関数に渡し、結果を画面に表示する必要があります。

プロシージャ TForm1.Button1Click(送信者: TObject);

あなたの優れた成果をナレッジベースに送信するのは簡単です。 以下のフォームをご利用ください

よくできましたサイトへ">

研究や仕事でナレッジベースを使用している学生、大学院生、若い科学者の皆様には、大変感謝していることでしょう。

http://www.allbest.ru/ に掲載されています

データベース ライブラリ プログラム delphi

導入

1.3 データアクセス

2.1 プログラムインターフェース

結論

付録 A「プログラムリスト」

導入

現代の基本的な考え方 情報技術変化する現実世界を適切に反映し、ユーザーの情報ニーズを満たすためには、データをデータベースに編成する必要があるという概念に基づいています。 これらのデータベースは特別な管理下で作成され、運用されています。 ソフトウェアシステム、データベース管理システム (DBMS) と呼ばれます。

このコースの作業は、データベースを使用した実践的な活動の 1 つの側面を簡素化することに専念しています。

データベースは、サブジェクト領域からの構造化データの名前付きコレクションです。

統合を検討中 コンピューターテクノロジー V 日常生活、図書館などの機関が利用できます。 コンピュータプログラムさまざまなデータ (書籍、購読、読者などに関する情報) を保存するため。

目的 コースワーク図書館スタッフの作業を簡素化し、大幅な時間の節約につながる「図書館」プログラムを作成することです。

このコースの学習の目的は、既製のデータベースの使用および Delphi オブジェクト指向プログラミング システムを使用した独自のデータベースの作成に関する理論的および実践的な知識を体系化し、強化し、拡張することと、独立した作業を実行するスキルを開発することです。

1. ソフトウェア開発環境

開発には Delphi プログラミング言語が選択されました。 Delphi プログラミング言語は、いくつかの重要なテクノロジを組み合わせたものです。

マシンコードへの高性能コンパイラ。

オブジェクト指向コンポーネントモデル。

ソフトウェア プロトタイプからアプリケーションを視覚的に (したがって高速に) 構築します。

データベースを構築するためのスケーラブルなツール。

Delphi に組み込まれたコンパイラは、クライアント/サーバー アーキテクチャでアプリケーションを構築するために必要な高いパフォーマンスを提供します。 開発が容易になり、 早い時間完成したものをチェックする プログラムブロック、第 4 世代言語 (4GL) の特徴を備えていると同時に、3GL コンパイラーの特徴であるコード品質を提供します。 さらに、Delphi を使用すると、C の挿入や手動コードを作成する必要がなく、迅速な開発が可能になります (ただし、これは可能です)。

Delphi は、4GL 言語の表現力とプログラミングの容易さと 3GL の効率性を組み合わせた構造化オブジェクト指向言語 (Object Pascal) を使用します。 プログラマーは、Windows イベント プログラミングの複雑さを学ばなくても、すぐに実用的なアプリケーションの作成を開始できます。 Delphi は、カプセル化、継承、ポリモーフィズム、イベント管理などの高度なプログラミング概念を完全にサポートしています。

1.1 Delphi でのデータベースの操作

ADO テクノロジは、アプリケーションがさまざまな種類のデータ ソースにアクセスする単一の方法を提供します。 ADO の用語によれば、あらゆるデータ ソース (データベース、スプレッドシート、ファイル) はデータ ストアと呼ばれ、アプリケーションはデータ プロバイダーの助けを借りてデータ ストアと対話します。 最小セットアプリケーション コンポーネントには、接続オブジェクト、データ セット オブジェクト、またはクエリ プロセッサ オブジェクトが含まれる場合があります。 ADO テクノロジ全体には、オブジェクト自体だけでなく、オブジェクトとデータおよびアプリケーションとの相互作用を保証するメカニズムも含まれています。 ADO データ アクセス メカニズムと多数のオブジェクトおよびインターフェイスは、ADO ページにある一連のコンポーネントとして Delphi に実装されています。 このアーキテクチャにより、一連のオブジェクトとインターフェイスをオープンかつ拡張可能にすることができます。

[ADO] タブには次のコンポーネントが含まれています。

1. 接続コンポーネント:

2. 標準コンポーネント:

ADODataSet - ユニバーサル データ セット

ADOTable - データベーステーブル

ADOQuery - SQL クエリ

ADOStoredProc - ストアド プロシージャ

「ADO パレット」ページ Delphi コンポーネント、接続コンポーネントに加えて、データ セットを示し、ADO データ ストアで動作するように適合された標準コンポーネントがあります。

[接続] タブ (図 1 を参照) で、データベースまたはサーバーへのパスを指定する必要があります。

図 1 - 接続ウィンドウ

TADOTable コンポーネント - ADO データ ストアにアクセスし、そこからの情報を ADO データ ストアに提示するために使用されます。 表形式。 このコンポーネントは、プロパティとメソッドを継承して、各レコードとそのフィールドへの直接アクセスを提供します。 コンポーネントは、Connection または ConnectionString プロパティを通じてデータベースと通信します。

テーブル名は TableName プロパティで指定します。 Readonly プロパティを使用すると、特定のテーブルに読み取り専用制限を設定して、データを変更できないようにすることができます。 MasterSource プロパティは、参照整合性関係の作成に使用される TDataSource コンポーネントを指定します。

TDataSource コンポーネント - このコンポーネントはデータ セットにバインドします。 この通信は、データ セットの現在の状態に関する情報が含まれる DataSet プロパティを通じて行われます。 このコンポーネントには、操作を容易にする一連のプロパティとメソッドがあります。

AutoEdit プロパティは、関連する入力要素がフォーカスを受け取ったときに True の場合、データセットを自動的に編集可能な状態にします。

Edit メソッドは、関連付けられたデータ セットを編集可能な状態にします。

OnDataChange ハンドラー メソッドは、関連付けられたビジュアル コンポーネントでデータが編集されるときに呼び出されます。

OnUpdateData イベント ハンドラー メソッドは、変更されたデータがデータセットに保存される前に呼び出されます。 ハンドラーは、Post メソッドが実行される前に呼び出されます。

1.2 データアクセスコンポーネント

データ アクセス コンポーネントは非視覚的なコンポーネントです。 データベース テーブルはディスク上に配置され、物理オブジェクトです。 データセットは、テーブルに含まれるデータを操作するために使用されます。 Delphi システムの観点から見ると、データ セットは 1 つ以上のデータベース テーブルから取得されたレコードのコレクションです。 データ セットに含まれるレコードは特定のルールに従って選択され、特定のケースでは、データ セットには、関連付けられたテーブルのすべてのレコードが含まれることも、レコードが 1 つも含まれないこともあります。 データセットは、アプリケーションの実行時に操作できる論理テーブルです。 テーブルとデータセットの間の相互作用は、物理ファイルとファイル変数の間の相互作用に似ています。

Delphi では、データ セットを操作するためにコンポーネント DBTable と ADOTable、ADOQuery、DataAccess、DataControl が使用されます。

基本的なデータベース アクセス機能は、データ セットを行と列 (レコードとフィールド) のコレクションとして表す DataSet クラスによって提供されます。 このクラスは、データセットの移動と編集のための基本的なツールを提供します。

テーブル コンポーネントは、一度に 1 つのデータベース テーブルのみに関連付けることができるデータのセットです。 このデータ セットは、データにアクセスするナビゲーション方法に基づいて形成されるため、ローカル データベースにはテーブル コンポーネントを使用することをお勧めします。 リモート データベースを操作する場合は、Query コンポーネントを使用する必要があります。 テーブルと Table コンポーネント間の接続は、テーブルの名前を指定する TableName プロパティを通じて確立されます。

データを操作するためのコンポーネントは、コンポーネント パレットの DataControls ページ (図 2 を参照) にあり、アプリケーションのインターフェイス部分を構築することを目的としています。

図 2 - コンポーネントパレット

これらは、データセット内を移動し、レコードを表示および編集するために使用されます。

他のコンポーネントは、複数のレコードを一度に表示および編集するために使用されます。 このようなコンポーネントの例としては、データセットのレコードを表形式で表示する DBGrid や DBCtrlGrid があります。 データを操作するためのビジュアル コンポーネントは、標準ページと追加ページの対応するコンポーネントに似ていますが、主にデータベースの操作に焦点を当てており、追加の DataSource プロパティと Datafield プロパティがある点で異なります。 最初のものはデータ ソースを指し、2 つ目はビジュアル コンポーネントが関連付けられているデータ セット フィールドを指します。 たとえば、「編集」では文字列値が表示され、ユーザーはそれを変更できます。

これらのビジュアル コンポーネントのコンテンツをプログラムで変更しても、データセットは自動的に編集モードになりません。 この目的のために、コードは最初にセットの Edit メソッドを呼び出す必要があります。 現在のレコードのフィールドへの変更を保存するには、Post メソッドの呼び出しやデータセット内の別のレコードへの移動など、適切なアクションも提供する必要があります。 ビジュアル コンポーネントのライブラリでは、データを操作するように設計されたコンポーネントを含むすべてのコンポーネントの基本クラスは Control クラスです。 要素の位置とサイズ、タイトル、色、その他のパラメータなどの基本的な機能属性を提供します。 Control クラスには、ビジュアル コンポーネントに共通のプロパティ、イベント、メソッドが含まれています。

ウィンドウ コントロールは、問題を解決するために設計された特殊なウィンドウです。 特定のタスク。 このような要素には、編集フィールド、コマンド ボタン、スクロール バーなどがあります。

Edit、DBEdit、Memo、DBMemo などのコンポーネントは、入力フォーカスを受け取ると、その領域に編集カーソルを表示します。 入力フォーカスを受け取る編集情報に関係のないコンポーネントは、通常、黒い点線の長方形を使用して表示されます。

Name プロパティは、アプリケーションの実行中にコンポーネントを管理するために使用されるコンポーネントの名前を指します。

Caption プロパティには、コンポーネントのキャプションの文字列が含まれます。 タイトル内の個々の文字には、ショートカット キーの組み合わせを示すために下線が付けられている場合があります。

ビジュアル コンポーネントは、さまざまなタイプのかなりの数のイベントを生成および処理できます。 最も一般的なイベントのグループには、次のアクションが含まれます。

コントロール要素の選択;

マウスポインタを移動します。

キーボードのキーを押す。

コントロール要素による入力フォーカスの取得と喪失。

ドラッグアンドドロップ方式を使用してオブジェクトを移動します。

1.3 データアクセス

ナビゲーション アクセス方法では、操作は個々のレコードに対して実行されます。 各データ セットには、現在のレコード、つまり編集や削除などのフィールド操作を実行できるレコードへのポインタがあります。 テーブル コンポーネントとクエリ コンポーネントを使用すると、このポインタの位置を制御できます。

ナビゲーション アクセス方法では、次の操作を実行できます。

レコードの並べ替え。

データセットのナビゲーション。

エントリーの編集;

レコードの挿入と削除。

レコードのフィルタリング。

レコードを検索します。

レコードの編集には、フィールドの値の変更が含まれます。 編集できるのは現在のレコードのみであるため、通常は編集アクションの前に、必要なレコードを検索して移動する操作が実行されます。 その後。 現在のレコード ポインタが目的のレコードに設定され、データ セットが表示モードになったら、レコードを編集するには次のようにします。

データセットを編集に転送します。

レコードフィールドの値を変更します。

Insert メソッドは、データ セットを挿入モードにし、新しい空のレコードをデータ セットに追加します。

エントリを追加するには、次のものが必要です。

データセットを記録モードにします。

新しいレコードのフィールドの値を設定します。

変更を確認するか拒否します。

現在のレコードは、変更中のデータ セットに対してのみ機能する Delete メソッドを使用して削除されます。 レコードが正常に削除されると、次のレコードが現在のレコードになり、最後のレコードが削除されると、カーソルは前のレコードに移動し、それが削除後の最後のレコードになります。 一部の DBMS とは異なり、Delphi では、削除されたレコードは実際にデータ セットから削除されます。

エントリの順序は指定できません。 デフォルトでは、レコードは並べ替えられていないか、並べ替えられています。 ソートされたレコードのセットを操作する方が便利です。 並べ替えは、特定のフィールドごとに、そのフィールドに含まれる値の昇順または降順でレコードを配置することで構成されます。 複数のフィールドで並べ替えることもできます。

2 つのフィールドで並べ替える場合、レコードは最初に最初のフィールドの値で並べ替えられ、次に最初のフィールドの値が同じであるレコードのグループが 2 番目のフィールドで並べ替えられます。 テーブル データセットとクエリ データセットはさまざまな方法で並べ替えられます。 テーブル データ セットは、現在のインデックスによって自動的に並べ替えられます。 インデックスが変更されると、レコードは自動的に並べ替えられます。 これにより、インデックスが作成されたフィールドごとにソートが可能になります。

データ セット内の移動には、現在のレコード ポインタの管理が含まれます。 このポインタは、編集や削除などの操作が実行されるレコードを指定します。

現在のレコード ポインターを移動する前に、データセットは自動的に表示モードになります。 現在のレコードが編集モードまたは挿入モードの場合、ポインターを移動する前に、レコードに加えられた変更が有効になり、データ セットは自動的に CheckBrowseMode メソッドを呼び出します。

データセット内のレコード間を移動すると、関連するビジュアル コンポーネントにデータへの変更が表示され、表示は非常に迅速に変更されることがあります。

レコードのフィルタリングとは、データ セットに対して選択されたレコードに制限を設定することです。 データセットは、1 つ以上のテーブルから抽出されたレコードです。 特定の時点におけるデータセット内のレコードの構成は、 確立された制限、フィルターからのものも含めて。

Delphi システムを使用すると、レコードをフィルタリングできます。

表現によれば、

範囲別。

式フィルタリングを使用する場合、データ セットは、レコードを選択するための条件を指定するフィルタ式を満たすレコードに制限されます。

式によるフィルタリングの利点は、インデックスのないフィールドを含むあらゆるフィールドに適用できることです。 選択プロセス中にテーブルのすべてのレコードが表示されるため、式によるフィルタリングは少数のレコードに対して効果的です。

フィルター式を指定するには、次の要素を含めることができる構造になります。

テーブルのフィールド名。

リテラル;

比較演算。

算術演算。

論理演算。

丸めて 角括弧.

フィールド名にスペースが含まれる場合は、角かっこで囲まれます。 フィルター式では変数名を使用できません。 フィルター式にコンポーネントの変数またはプロパティの値を含める必要がある場合、その値を文字列型に変換する必要があります。 比較演算は通常の関係です<,>,=,<=,>=,<>。 算術演算子は +、-、*、/ です。 論理演算子として AND、OR、NOT を使用できます。 括弧は、算術演算および論理演算の実行順序を変更するために使用されます。

Table データ セットでは、Filter フィルター式を使用する方法と OnFilterRecord イベント ハンドラーでフィルター条件を設定する 2 つの方法が可能です。

範囲でフィルタリングする場合、データセットにはフィールド値が範囲内に収まるレコードが含まれます。 与えられた範囲、つまり フィルタリング条件は、「値>下限 AND 値」の形式の式です。< верхней границы". Такая фильтрация применяется к наборам данных Table.

範囲フィルタリングを有効または無効にするには、ApplyRange メソッドと CancelRange メソッドを使用します。 最初のものはフィルタリングをアクティブにし、もう 1 つは非アクティブにします。 最初に、フィルタリングを実行するインデックス フィールドの範囲を設定する必要があります。 許容可能な値。 範囲境界の 1 つが指定されていない場合、範囲はオープンです。つまり、下限はこのフィールドの可能な最小値に等しく、上限はこのフィールドの可能な最大値に等しくなります。

特定の条件を満たすレコードを見つけるということは、そのレコードに移動することを意味します。 検索プロセスではレコードのフィールドも特定の条件でチェックされるため、検索は多くの点でフィルタリングと似ています。

違いは、検索によってデータ セット内のレコード数が変更されないことです。 レコードの検索を整理するとき 重要には、検索対象のフィールドのインデックスがあります。 インデックスを作成すると、データ処理の速度が大幅に向上します。また、多くのメソッドはインデックス付きフィールドでのみ機能します。

フィールドによってレコードを検索するには、Locate メソッドと Lookup メソッドを使用します。フィールドにはインデックスが付けられない可能性があります。 Locate 関数は、指定されたフィールド値を持つレコードを検索します。 検索条件を満たすレコードが存在する場合、カレントレコードポインタは先頭のレコードに設定されます。 エントリが見つかった場合、関数は True を返し、それ以外の場合は False を返します。 通常、アプリケーションを開発するとき、ユーザーにはフォーム上にあるコントロールを使用して検索プロセスに影響を与える機会が与えられます。 Lookup 関数も特定の条件を満たすレコードを検索しますが、Locate メソッドとは異なり、現在のレコード ポインターを移動せず、レコードのフィールドから情報を読み取ります。 2 つのメソッドのもう 1 つの違いは、Lookup メソッドは検索値とレコード フィールドの値の間で大文字と小文字を区別した照合を実行することです。

2.「ライブラリ」データベースの開発

プログラム「データベース「ライブラリ」」の開発には、オブジェクト指向対話環境 Delphi 7 が選択されました。

データベースは 1 つのテーブルで構成されており、 モダンタイプ拡張フィールドタイプの「アクセス」。 データ アクセスは、Delphi ADO サブシステムを通じて行われます。

「ライブラリ」テーブルには、作業に必要なすべてのデータが含まれます。データベース フィールドの説明は表 1 にあります。

表 1 - テーブル「フルクト」

説明

文章

書籍または出版物のコードが含まれています

文章

セクション名

文章

文章

本のタイトル

文章

発行年が記載されています

文章

その本を出版した出版社の名前

文章

読者の姓とイニシャル

文章

図書カード番号

日付時刻

書籍の発行日

文章

本のコピーが返却された、または手元にあることを示すメモが含まれています

2.1 プログラムインターフェース

プログラムを開始するには、biblioteka.exe ファイルをダブルクリックする必要があります。 起動後、作業用のメイン フォームが表示されます (図 3 を参照)。

図3 - メインフォームアプリケーション

フォームにはいくつかのセクションが含まれています。

1. メニューボタン;

2. 情報を検索およびフィルタリングするためのパネル。

3. データベースの内容を表示するセクション。

4. ナビゲーションおよびデータ編集ボタン。

最初はデータ編集ボタンがアクティブになっていないため、「編集」ボタンを押す必要があります。 次に、テーブルは編集モードに入ります。 テーブルにデータを追加する場合、一部のフィールドにはネストされたリストが含まれることに注意してください。たとえば、「セクション」フィールドにデータを追加すると、テーブルは図 4 のようになります。

図 4 - テーブルへのデータの追加

図 5 はフィルターを適用した結果を示しています

図 5 - データのフィルタリング結果

すべてのレコードを表示するには、「すべてのレコード」ボタンをクリックします。

データを印刷する場合は「印刷」ボタンを選択してください。 レポートは MS Excel で出力されます。 レポート ビューを図 6 に示します。

図 6 - データ出力

ログアウトすると、図 7 に示すウィンドウが表示されます。

結論

コースの学習中に、次の機能を備えた「ライブラリ」プログラムが開発されました。

1) データの表示と編集。

2) 情報検索

3) データのフィルタリング。

5) データを印刷する。

結論として、データが表に表示され、時間を大幅に節約できるため、作成したプログラムはシンプルで使いやすいと言えます。 このプログラムは、図書館で働き、基本的なコンピューター スキルを持っている人なら誰でも利用できます。

このプログラムには大きな可能性があります。 将来的には、さまざまな機能を追加することでプログラムの機能が拡張される可能性があります。 たとえば、プログラムにいくつかの新しいタイプの検索と並べ替えを追加したり、(データをより明確にするために) データをグラフの形式で表示する機能を追加したりできます。 より多くの機能を提供するためにテーブルを追加する機能を追加することもできます。

中古文献リスト

1. Darakhvelidze P.G.、マルコフ E.P. Win32 用の Delphi 2005。 - サンクトペテルブルク: BHV-ペテルブルク、2005。 - 1136 p.

2.ボロフスキーA.N. Delphi 2005 でのプログラミング。 - サンクトペテルブルク: BHV-Petersburg、2005。 - 448 p。

3. ゴフマン V.E.、ホモネンコ A.D. Delphi でのデータベースの操作。 - サンクトペテルブルク: BHV-ペテルブルク、2011。 - 656 p.

4. ロマンチク V.S.、A.E. Lyulkin、「Delphi 7 でのプログラミング: 学生のためのマニュアル」。 ミンスク:BSU、2007年。 - 128ページ。

5. ゴフマン V.E.、ホモネンコ A.D. デルフィ。 ファストスタート。 - サンクトペテルブルク: BHV-ペテルブルク、2003。 - 288 p。

付録 A

番組一覧

ウィンドウ、メッセージ、SysUtils、バリアント、クラス、グラフィックス、コントロール、フォーム、

ダイアログ、DB、ADODB、グリッド、DBGrids、StdCtrls、ボタン、ExtCtrls、DBCtrls、OleServer、ComObj、

TForm1 = クラス(TForm)

コントロールバー1: Tコントロールバー;

ビットBtn1: TBitBtn;

ビットBtn2: TBitBtn;

ビットBtn3: TBitBtn;

ビットBtn4: TBitBtn;

グループ ボックス 1: TG グループ ボックス;

ビットBtn5: TBitBtn;

DBGrid1: TDBGrid;

ADOTable1: TADOTable;

データソース 1: TDataSource;

RadioButton1: TRadioButton;

RadioButton2: TRadioButton;

DBNavigator1: TDBNavigator;

ExcelApplication1: TExcelApplication;

ビットBtn6: TBitBtn;

ビットBtn7: TBitBtn;

ビットBtn8: TBitBtn;

プロシージャ BitBtn3Click(送信者: TObject);

プロシージャ BitBtn4Click(送信者: TObject);

プロシージャ FormClose(Sender: TObject; var Action: TCloseAction);

プロシージャ BitBtn2Click(送信者: TObject);

プロシージャ BitBtn5Click(送信者: TObject);

プロシージャ RadioButton1Click(送信者: TObject);

プロシージャ RadioButton2Click(送信者: TObject);

プロシージャ BitBtn1Click(送信者: TObject);

プロシージャ BitBtn6Click(送信者: TObject);

プロシージャ BitBtn8Click(送信者: TObject);

プロシージャ BitBtn7Click(送信者: TObject);

(私的申告)

(公的宣言)

例: OleVariant;

// MyDir:String;

プロシージャ TForm1.BitBtn3Click(送信者: TObject);

ADOTable1.Filtered:=false;

プロシージャ TForm1.BitBtn4Click(送信者: TObject);

アプリケーションを終了します。

プロシージャ TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

if MessageDlg("アプリケーションを閉じてもよろしいですか?",mtconfirmation,,0)=mrCancel then Abort ;

アプリケーションを終了します。

プロシージャ TForm1.BitBtn2Click(送信者: TObject);

//bm:Tブックマーク;

列、行、i: 整数。

ExcelApp、ワークブック、列、シート: OLVariant;

テンプレートファイル,cn,un:String;

PRes:= StrAlloc(サイズ);

BRes:= GetComputerName(PRes, サイズ);

BRes の場合、 cn:= StrPas(PRes);

サイズ:= MAX_COMPUTERNAME_LENGTH + 1;

PRes:= StrAlloc(サイズ);

BRes:= GetUserName(PRes, サイズ);

BRes の場合、un:= StrPas(PRes);

Screen.Cursor:= crArrow;

DBGrid1.DataSource.DataSet.DisableControls;

DBGrid1.DataSource.DataSet.First;

// Excel オブジェクトを作成します

ExcelApp:=CreateOleObject("excel.application");

Excelapp.Application.EnableEvents:=false;

ExcelApp.WorkBooks.Add(xlWBatWorkSheet);

ExcelApp.WorkBooks.WorkSheets.name:= "レポート";

ExcelApp.Visible:= false;

Colum:=ExcelApp.Workbooks.WorkSheets["レポート"].Columns;

DBGrid1.Columns.Visible の場合は開始します

Colum.Columns[i].ColumnWidth:=25;Inc(i);

列:=ExcelApp.Workbooks.WorkSheets["レポート"].Rows;

Colum.Rows.Font.Bold:=true;

列.行.フォント.サイズ:=8;

Colum.Rows.Font.Bold:=true;

列.行.フォント.カラー:=0;

列.行.フォント.サイズ:=10;

ExcelApp.Visible:= false;

mem:= TMemo.Create(Self);

mem.Visible:= false;

mem.Parent:= Form1;

sline:=("ライブラリデータ"+#9+DateToStr(日付)+#9+TimeToStr(時刻));

mem.Lines.Add(sline);

forcol:= 0 から DBGrid1.FieldCount-1 まで

DBGrid1.Columns.Visible の場合

sline:= sline + form1.DBGrid1.Columns.Title.Caption + #9;

mem.Lines.Add(sline);

mem.Lines.Add("");

for row:= 0 から form1.DBGrid1.DataSource.DataSet.RecordCount-1 まで

forcol:= 0 から form1.DBGrid1.FieldCount-1 まで

form1.DBGrid1.Columns.Visible の場合

sline:= sline + form1.DBGrid1.Fields.AsString + #9;

mem.Lines.Add(sline);

form1.DBGrid1.DataSource.DataSet.Next;

form1.DBGrid1.DataSource.DataSet.Eof の場合は Break;

mem.CopyToClipboard;

ExcelApp.Visible:= true;

ExcelApp.Workbooks.WorkSheets["レポート"].Paste;

ExcelApplication1.無料。

form1.DBGrid1.DataSource.DataSet.EnableControls;

Screen.Cursor:= crArrow;

プロシージャ TForm1.BitBtn5Click(送信者: TObject);

if ADOTable1.Locate("avtor",Edit1.Text,) then DBGrid1.SetFocus else

MessageDlg("検索に失敗しました", mtconfirmation,,0);

プロシージャ TForm1.RadioButton1Click(送信者: TObject);

ADOTable1.Filter:="izdatelsvo="+""""+Edit1.Text+"""";

ADOTable1.Filtered:=true;

プロシージャ TForm1.RadioButton2Click(送信者: TObject);

ADOTable1.Filter:="razdel="+"""+Edit1.Text+"""";

ADOTable1.Filtered:=true;

プロシージャ TForm1.BitBtn1Click(送信者: TObject);

BitBtn6.Enabled:=true;

BitBtn7.Enabled:=true;

BitBtn8.Enabled:=true;

プロシージャ TForm1.BitBtn6Click(送信者: TObject);

ADOTable1.挿入;

プロシージャ TForm1.BitBtn8Click(送信者: TObject);

プロシージャ TForm1.BitBtn7Click(送信者: TObject);

if MessageDlg("エントリを削除してもよろしいですか?",mtconfirmation,,0)=mrCancel then Abort ;

ADOTable1.削除;

Allbest.ru に掲載

類似の文書

    Delphi プログラミング環境を操作する理論と技術についての考察。 説明 プログラム インターフェイス、データ構造、ポイント生成の説明。 平面上の点によって形成できるすべての正方形を特定するタスクの開発。

    要約、追加 01/13/2015

    ビジュアル ツールを使用して、C++ プログラミング言語で Borland C++Builder 6 環境の「ライブラリ」データベースを操作するためのプログラムを開発します。 情報の構造、情報への接続、およびその表示。 ユーザーインターフェースの説明。

    コースワーク、2014/05/19 追加

    オブジェクト指向プログラミング言語 Delphi の作成の歴史と機能について理解します。 MEMOフィールドに入力されたテキスト内の単語の繰り返し回数を記録するアプリケーションの開発。 プログラムインターフェイスの説明。

    コースワーク、2015/04/21 追加

    アプリケーション開発の特徴 オペレーティング·システム命令型で構造化されたオブジェクト指向プログラミング言語 Delphi を使用します。 プログラムの正式な開始。 プログラムブロックの終わりを選択します。 プログラムのリストと説明。

    コースワーク、2014/08/04 追加

    ソフトウェア開発と実装の主な段階。 データベースの概念、機能、分類。 カードのインデックスを維持し、書籍の発行を記録するための「ライブラリ」データベースの設計。 プログラムのユーザー インターフェイス、テスト方法。

    論文、2012/06/09 追加

    オブジェクト指向およびビジュアルプログラミングを使用したデータベースアプリケーションの開発。 Delphi プログラミング言語の要素言語のレビュー。 ガソリン スタンドのデータベースを設計します。 アプリケーションクライアントシステム。

    コースワーク、2016/01/31 追加

    情報モデルの一般的な特徴 情報システム。 図書館データベースの設計機能の紹介、主要な段階の分析。 データベース テーブルから情報を取得するクエリを作成する方法を検討します。

    テスト、2013/12/08 追加

    図書館にデータベースを作成する方法と主な段階、データベースに反映される情報、および機能の特徴。 情報論理データベースモデルを構築する手順。 フォームを使用したユーザー インターフェイスの実装の機能。

    コースワーク、2010/10/19 追加

    図書館データベースのメンテナンスを自動化するシステムの開発。 基本的な要件 ソフトウェア。 ローカル表現のモデル。 情報システムのアーキテクチャ。 ストアド プロシージャ。 データベースを作成するためのSQLスクリプト。 プログラムテキスト。

    論文、2014 年 1 月 28 日追加

    ホテルビジネスにおけるIT活用の基本を考える。 データベース管理システムの選択。 情報技術の説明。 Delphi 7 オブジェクト指向プログラミング環境でのソフトウェア実装の実行。