|
Registriert seit: 27. Nov 2017 2.599 Beiträge Delphi 7 Professional |
#23
SelAvail, SelText, SelLength ..
bezieht sich evtl auf TSynMemo, nicht auf ein normales/Standard. ![]() @Asura ADOTable ist für die statische Anzeige eines Tabelleninhaltes, ADOQuery für die Ausführung von SQL-Statements. DataSource benotigt ein TDataSet, ADOQuery und ADOTable sind beide von TDataSet abgeleitet, funktionieren also beide. Einfach mal von beiden eins aufs Formular pappen, 'ne DataSource dazu und im Objektinspektor zum DataSource bei DataSet schauen, was da so zur Auswahl steht. Alles was da angezeigt wird, kann man auch nutzen. Bezüglich Deiner Alternative zum SelAvail: Ja, das geht auch so, mit SelText bekommst Du ja den markierten Text. Wie und ob das bei unterschiedlichen Komponenten unterschiedlich funktioniert ist ja eher nachrangig, Hauptsache: Ziel erreicht ![]() Das Memo ist für die Eingabe von SQLs. Dort tut sich nichts, außer Du gibst dort was ein. Deine Eingabe wird dann an die ADOQuery weitergereicht und nach deren öffnen, mit Hilfe einer DataSource und den dieser zugeordneten Datenkomponente (z. B. einem DBGrid), angezeigt. Mal einen nicht wirklich sinnvollen Quelltext, mit dem man das demonstrieren könnte:
Delphi-Quellcode:
Dieser Quelltext ist so in etwa für eine Demonstration geeignet, aber nicht für den wirklichen Betrieb.
ADOQuery.Close;
ADOTable.Close; ADOTable.TableName := 'users'; DataSource.DataSet := ADOQuery; ADOQuery.SQL.Text := 'select * from users where ID = 1'; ADOQuery.Open; ShowMessage('Sieht man jetzt den User mit der ID 1?'); ADOQuery.Close; ADOTable.Open; ShowMessage('Sieht man jetzt alle User?'); ADOTable.Close; Wenn ich etwas benötige, um beliebige Daten anzuzeigen, nutze ich nie eine ADOTable, sondern immer nur ADOQuery (bzw. bei anderen Datenbankkomponenten die entsprechenden Gegenstücke). Will ich alle Daten einer Tabelle sehen, dann ist die Abfrage eben Select * from ebendertabelledieichsehenwill. Ein Hin und Her per Zuweisung von diversen DataSet-Nachkommen zu eine DataSource macht nur den Quelltext verwirrend und scheint mir nicht zielführend. Mal eben wild zusammengedaddelt so eine Art "Demo" ![]()
Delphi-Quellcode:
Und das Formular dazu:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DB, ADODB, ExtCtrls, DBCtrls, Grids, DBGrids, ComCtrls; type Tfrm = class(TForm) DataSource: TDataSource; ADOQuery: TADOQuery; pnTop: TPanel; StatusBar: TStatusBar; DBGrid: TDBGrid; DBNavigator: TDBNavigator; Splitter: TSplitter; ADOConnection: TADOConnection; btnSQL: TButton; btnEnde: TButton; pnInfo: TPanel; SQLEingabe: TMemo; Splitter1: TSplitter; Tabellen: TMemo; procedure btnEndeClick(Sender: TObject); procedure btnSQLClick(Sender: TObject); procedure TabellenDblClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private-Deklarationen } public { Public-Deklarationen } end; var frm: Tfrm; implementation {$R *.dfm} procedure Tfrm.btnEndeClick(Sender: TObject); begin ADOQuery.Close; ADOConnection.Close; Close; end; procedure Tfrm.btnSQLClick(Sender: TObject); var slTables : TStringList; slFields : TStringList; i : Integer; k : Integer; begin if not ADOConnection.Connected then begin if ADOConnection.ConnectionString = '' then begin ADOConnection.ConnectionString := PromptDataSource(handle,''); end; if ADOConnection.ConnectionString <> '' then begin ADOConnection.Open; Tabellen.Lines.Clear; slTables := TStringList.Create; slFields := TStringList.Create; ADOConnection.GetTableNames(slTables,false); for i := 0 to slTables.Count - 1 do begin Tabellen.Lines.Add(slTables[i]); ADOConnection.GetFieldNames(slTables[i],slFields); for k := 0 to slFields.Count - 1 do begin Tabellen.Lines.Add(Format(' %s',[slFields[k]])); end; end; slTables.Free; slFields.Free; end; end; if ADOConnection.Connected then begin ADOQuery.Close; ADOQuery.SQL.Clear; if SQLEingabe.SelLength <> 0 then begin ADOQuery.SQL.Add(Trim(SQLEingabe.SelText)); end else begin ADOQuery.SQL.Add(Trim(SQLEingabe.Text)); end; if Trim(ADOQuery.SQL.Text) <> '' then begin ADOQuery.Open; end; end; end; procedure Tfrm.TabellenDblClick(Sender: TObject); begin if Tabellen.SelText <> '' then begin SQLEingabe.SelText := Tabellen.SelText; end; end; procedure Tfrm.FormCreate(Sender: TObject); begin if FileExists(ChangeFileExt(Application.ExeName,'.sql')) then begin SQLEingabe.Lines.LoadFromFile(ChangeFileExt(Application.ExeName,'.sql')); end; end; procedure Tfrm.FormClose(Sender: TObject; var Action: TCloseAction); begin SQLEingabe.Lines.SaveToFile(ChangeFileExt(Application.ExeName,'.sql')); end; end.
Delphi-Quellcode:
Im realen Leben sollte man allerdings nicht gänzlich auf jedwede Fehlerbehandlung verzichten.
object frm: Tfrm
Left = 4 Top = 4 Width = 1000 Height = 640 Caption = 'Demo-Datenbankoberfläche ;-)' Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] OldCreateOrder = False OnClose = FormClose OnCreate = FormCreate PixelsPerInch = 96 TextHeight = 13 object Splitter: TSplitter Left = 0 Top = 265 Width = 992 Height = 8 Cursor = crVSplit Align = alTop Beveled = True end object pnTop: TPanel Left = 0 Top = 0 Width = 992 Height = 41 Align = alTop BevelOuter = bvNone TabOrder = 0 object btnSQL: TButton Left = 8 Top = 8 Width = 97 Height = 25 Caption = '&SQL ausführen' TabOrder = 0 OnClick = btnSQLClick end object btnEnde: TButton Left = 112 Top = 8 Width = 75 Height = 25 Caption = '&Ende' TabOrder = 1 OnClick = btnEndeClick end end object StatusBar: TStatusBar Left = 0 Top = 594 Width = 992 Height = 19 Panels = <> end object DBGrid: TDBGrid Left = 0 Top = 273 Width = 992 Height = 296 Align = alClient DataSource = DataSource TabOrder = 2 TitleFont.Charset = DEFAULT_CHARSET TitleFont.Color = clWindowText TitleFont.Height = -11 TitleFont.Name = 'MS Sans Serif' TitleFont.Style = [] end object DBNavigator: TDBNavigator Left = 0 Top = 569 Width = 992 Height = 25 DataSource = DataSource Align = alBottom TabOrder = 3 end object pnInfo: TPanel Left = 0 Top = 41 Width = 992 Height = 224 Align = alTop BevelOuter = bvNone TabOrder = 4 object Splitter1: TSplitter Left = 697 Top = 0 Width = 8 Height = 224 Beveled = True end object SQLEingabe: TMemo Left = 0 Top = 0 Width = 697 Height = 224 Align = alLeft TabOrder = 0 end object Tabellen: TMemo Left = 705 Top = 0 Width = 287 Height = 224 Align = alClient TabOrder = 1 OnDblClick = TabellenDblClick end end object DataSource: TDataSource DataSet = ADOQuery Left = 632 Top = 48 end object ADOQuery: TADOQuery Connection = ADOConnection Parameters = <> Left = 560 Top = 48 end object ADOConnection: TADOConnection Left = 472 Top = 48 end end |
![]() |
Ansicht |
![]() |
![]() |
![]() |
ForumregelnEs ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus. Trackbacks are an
Pingbacks are an
Refbacks are aus
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
![]() |
![]() |