grsail.com

Proste Query Builder przy użyciu ADO składniki?

Pisanie prosty kreator zapytań przy użyciu ADO składniki.

Ten artykuł ma na celu wykazanie, jak możemy korzystać z ADO komponenty dostępne w Delphi.

Napisałem prosty aplikacji przy użyciu ADO komponenty do pobierania nazwy danych źródłowych, nazwy tabel, pól nazw, postępowanie Nazwy i opcję, aby napisać kwerendę i uruchomić go i wyświetlić wynik w siatce.

Funkcja aplikacji:

Po uruchomieniu aplikacji, to będzie pobrać wszystkie nazwy źródła danych ODBC z obecnego systemu i listy w polu listy. Jeśli wybierzesz Nazwa źródła danych, użytkownik zostanie poproszony o wprowadzenie nazwy użytkownika i hasła. Po wpisaniu właściwej nazwy użytkownika i hasła, tabele i procedur dostępnych w źródle danych. A jeśli klikniesz na nazwę tabeli, wszystkie pola w tabeli zostaną wymienione.

A w dziedzinie notatki, można wprowadzić zapytanie SQL i kliknij przycisk Execute, to będzie wykonać zapytanie i wyświetlić wynik w poniższej tabeli.

Ponadto można zapisać kwerendę do pliku tekstowego po kliknięciu na przycisk Zapisz.

A w polu listy Źródło danych nazw, jeśli kliknij prawym przyciskiem myszy, pojawi się menu Odśwież i będzie to odświeżenie nazwy źródła danych ODBC.

To jest naprawdę prosta wersja Query Builder i możemy dodać wiele możliwości, jak to możliwe i po prostu chciałem podzielić się ci ludzie.

Poniżej znajduje się pełny kod dla aplikacji:

Plik projektu: ADODemo.dpr

Program ADODemo;

zastosowania

Formy,

UADODemo1 w "UADODemo1.pas '{frmADODemo},

ULogin w "ULogin.pas '{frmLogin};

{$ R * .RES}

rozpocząć

Application.Initialize;

Application.Title: = 'ADO Demo ";

Application.CreateForm (TfrmADODemo, frmADODemo);

Application.CreateForm (TfrmLogin, frmLogin);

Application.Run;

koniec.

Plik Unit 1: UADODemo1.pas

Jednostka UADODemo1;

Interfejs

zastosowania

Okna, Wiadomości, sysutils, warianty, Ćwiczenia, Grafika, sterujące, Formy,

Dialogi, StdCtrls, DB, DBTables, adodb, ExtCtrls, przyciski, Kraty, DBGrids,

ComCtrls, Inifiles, dietetyczne;

Const

WinNTOr2000 = "C: \ WinNT \ ';

Win95Or98 = "C: \ Windows \ ';

ODBCDataSources = 'ODBC 32 bit Źródła danych ";

typ

TfrmADODemo = class (TForm)

pnlClientPanel: TPanel;

lblDataSources: TLabel;

lbxDataSources: TListBox;

lblTables: TLabel;

lbxTables: TListBox;

lblFields: TLabel;

lbxFields: TListBox;

lblProcedures: TLabel;

lbxProcedures: TListBox;

memQueryText: TMemo;

lblQueryText: TLabel;

bitExecute: TBitBtn;

bitClose: TBitBtn;

bitSaveQuery: TBitBtn;

dbgResultData: TDBGrid;

lblQueryResult: TLabel;

ADOConnection: TADOConnection;

sbrStatusBar: TStatusBar;

popRefresh: TPopupMenu;

mitRefresh: TMenuItem;

DlgSaveDialog: TSaveDialog;

ADOQuery1: TADOQuery;

Procedura FormCreate (Sender: TObject);

Procedura lbxDataSourcesClick (Sender: TObject);

Procedura bitSaveQueryClick (Sender: TObject);

Procedura lbxTablesClick (Sender: TObject);

Procedura bitExecuteClick (Sender: TObject);

Procedura FormDestroy (Sender: TObject);

prywatny

Funkcja ODBCPath: String;

Oświadczenia} {prywatnych

publiczny

Publiczne} {deklaracje

puszki;

var

frmADODemo: TfrmADODemo;

DSNSelectedIndex: Integer;

realizacja

wykorzystuje ULogin;

{$ R * .dfm}

Procedura TfrmADODemo.FormCreate (Sender: TObject);

// Ładowanie nazwy źródeł danych

var

DataSources: TStringList;

ODBCIniFile: TIniFile;

rozpocząć

DSNSelectedIndex: = 0;

DataSources: = TStringList.Create;

ODBCIniFile: = TIniFile.Create (ODBCPath + "ODBC.INI ');

ODBCIniFile.ReadSection (ODBCDataSources, źródła danych);

lbxDataSources.Items.Assign (DataSources);

puszki;

Funkcja TfrmADODemo.ODBCPath;

// Znalezienie lokalizację pliku ODBC.INI

var

OSVersionInfo: TOSVersionInfo;

rozpocząć

OSVersionInfo.dwOSVersionInfoSize: = sizeof (OSVersionInfo);

jeśli GetVersionEx (OSVersionInfo), a następnie

rozpocząć

if ((OSVersionInfo.dwMajorVersion = 5) lub (OSVersionInfo.dwMajorVersion = 4)) i

(OSVersionInfo.dwMinorVersion = 0) i

(OSVersionInfo.dwPlatformId = VER_PLATFORM_WIN32_NT), a następnie

ODBCPath: = WinNTOr2000

else if (OSVersionInfo.dwPlatformId = VER_PLATFORM_WIN32_NT), a następnie

ODBCPath: = WinNTOr2000

else if (OSVersionInfo.dwPlatformId = 3) i (OSVersionInfo.dwMinorVersion = 51)

oraz (OSVersionInfo.dwPlatformId = VER_PLATFORM_WIN32_NT), a następnie

ODBCPath: = WinNTOr2000

więcej

ODBCPath: = Win95Or98;

puszki;

puszki;

Procedura TfrmADODemo.lbxDataSourcesClick (Sender: TObject);

rozpocząć

// Jeśli połączenie jest otwarta, zamknij ją pierwszy

Następnie, jeśli ADOConnection.Connected

ADOConnection.Close;

// Pokazuje się okno dialogowe Database Zaloguj

frmLogin.edtName.Clear;

frmLogin.edtPassword.Clear;

jeśli frmLogin.ShowModal = mrok następnie

rozpocząć

próbować

Screen.Cursor: = crHourGlass;

ADOConnection.ConnectionString: = 'User ID = "+ frmLogin.edtName.Text +"; Password = "+ frmLogin.edtPassword.Text +"; Data Source = "+ lbxDataSources.Items [lbxDataSources.ItemIndex];

ADOConnection.Connected: = true;

DSNSelectedIndex: = lbxDataSources.ItemIndex;

lbxTables.Clear;

lbxProcedures.Clear;

lbxFields.Clear;

ADOConnection.GetTableNames (lbxTables.Items);

ADOConnection.GetProcedureNames (lbxProcedures.Items);

Screen.Cursor: = crDefault;

z wyjątkiem

Screen.Cursor: = crDefault;

lbxTables.Clear;

lbxProcedures.Clear;

lbxFields.Clear;

MessageDlg ("Nie można połączyć się" + lbxDataSources.Items [lbxDataSources.ItemIndex], mtInformation, [mbOk], 0);

puszki;

koniec

więcej

rozpocząć

lbxDataSources.Selected [DSNSelectedIndex]: = true;

puszki;

puszki;

Procedura TfrmADODemo.bitSaveQueryClick (Sender: TObject);

// Zapisywanie wpisane zapytanie do pliku tekstowego

rozpocząć

Następnie, jeśli DlgSaveDialog.Execute

memQueryText.Lines.SaveToFile (DlgSaveDialog.FileName);

puszki;

Procedura TfrmADODemo.lbxTablesClick (Sender: TObject);

// Uzyskanie nazwy pól i klikając nazwy tabeli

rozpocząć

lbxFields.Clear;

ADOConnection.GetFieldNames (lbxTables.Items [lbxTables.ItemIndex], lbxFields.Items);

puszki;

Procedura TfrmADODemo.bitExecuteClick (Sender: TObject);

// Wykonanie zapytania

rozpocząć

próbować

if (ADOConnection.Connected) i (Przytnij (memQueryText.Lines.Text) <> ""), a następnie

rozpocząć

ADOQuery1.Connection: = ADOConnection;

ADOQuery1.SQL.AddStrings (memQueryText.Lines);

ADOQuery1.ExecSQL;

dbgResultData.DataSource.DataSet: = ADOQuery1.DataSource.DataSet;

puszki;

z wyjątkiem

MessageDlg ('Błąd Pokazuje danych' mtInformation, [mbOk], 0);

puszki;

puszki;

Procedura TfrmADODemo.FormDestroy (Sender: TObject);

// Zamknięcie połączenia ADO jeśli jest podłączony

rozpocząć

Następnie, jeśli ADOConnection.Connected

ADOConnection.Close;

puszki;

koniec.

Kiedykolwiek wybrać nazwę źródła danych z listy, okno dialogowe logowania bazy danych pojawi się prosi nas, aby wprowadzić nazwę użytkownika i hasło do tego DSN i raz wprowadzić prawidłową nazwę użytkownika i hasło, będziemy być zalogowany i stoły będą wymienione procedury.

Plik Unit 2: Ulogin.pas

Jednostka ULogin;

Interfejs

zastosowania

Okna, Wiadomości, sysutils, warianty, Ćwiczenia, Grafika, sterujące, Formy,

Dialogi, ExtCtrls, ComCtrls, StdCtrls, Przyciski;

typ

TfrmLogin = class (TForm)

pnlClient: TPanel;

lblName: TLabel;

lblPassword: TLabel;

edtName: tEdycja;

edtPassword: tEdycja;

sbrStatusBar: TStatusBar;

bitOK: TBitBtn;

bitClose: TBitBtn;

Procedura FormShow (Sender: TObject);

prywatny

Oświadczenia} {prywatnych

publiczny

Publiczne} {deklaracje

puszki;

var

frmLogin: TfrmLogin;

realizacja

{$ R * .dfm}

Procedura TfrmLogin.FormShow (Sender: TObject);

rozpocząć

edtName.SetFocus;

puszki;

koniec.

Nie obejmował .dfm pliki z tym; jednak nadzieję, że można łatwo znaleźć składniki Użyłem używając .pas plików.

Mimo że istnieje tak wiele budowniczych zapytania dostępne, chciałem po prostu spróbować z ADO komponentów z Delphi i zamierzają rozszerzyć, dodając więcej funkcji. Jestem bardzo miło powitać swoje pomysły na ten temat.

Dzięki.

Magesh.