![]() |
AW: TDBXTypes.WideString-Wertetyp
Es friert eben leider das Programm ein bevor ich zu der funtion komme,
|
AW: TDBXTypes.WideString-Wertetyp
Merkwürdig jetzts gings wieder als wäre nichts gewesen. jedoch hält er beim brekpoint nicht an....?
|
AW: TDBXTypes.WideString-Wertetyp
Hallo gee21,
poste doch mal Deine kompletten Sourcen, ich kuck dann morgen (morgen ist ja schon heute) mal drüber. Vielleicht finde ich ja dann den bösen Buben, der da querschießt. Gruß |
AW: TDBXTypes.WideString-Wertetyp
Hallo Volker
Das ist ja mega lieb. DAnke dir vielmals. Ich glaube das müsste von dieser form alles sein.
Delphi-Quellcode:
Unit Unit6;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, DBTables, WideStrings, DBXMySql, SqlExpr, FMTBcd, DBClient, Provider, Grids, DBGrids, StdCtrls, ExtCtrls, DBCtrls,DBXDataExpressMetaDataProvider,iniFiles, strUtils,cdsfield, DBXTrace; type Tform6 = class(TForm) SQLConnection1: TSQLConnection; ComboBoxConnections: TComboBox; Label1: TLabel; EditSQL: TEdit; EditFilter: TEdit; CheckBoxActive: TCheckBox; DBNavigator1: TDBNavigator; ButtonApply: TButton; listbox1: TListBox; DBGrid1: TDBGrid; SQLDataSet1: TSQLDataSet; DataSetProvider1: TDataSetProvider; ClientDataSet1: TClientDataSet; DataSource1: TDataSource; procedure FormCreate(Sender: TObject); procedure ComboBoxConnectionsCloseUp(Sender: TObject); procedure listbox1DblClick(Sender: TObject); procedure DBGrid1CellClick(Column: TColumn); procedure CheckBoxActiveClick(Sender: TObject); procedure ClientDataSet1BeforeClose(DataSet: TDataSet); procedure ButtonApplyClick(Sender: TObject); procedure EditFilterChange(Sender: TObject); procedure EditFilterEnter(Sender: TObject); procedure EditFilterExit(Sender: TObject); procedure EditSQLChange(Sender: TObject); procedure FormDestroy(Sender: TObject); private TableName: String; AllTables: TStringList; //Liste der Datenbanktabellen FMetaDataProvider: TDBXDataExpressMetaDataProvider; MemoForm: TFormCurrentField; public function MatchFilter(FilterStr, TestStr: String): Boolean; procedure PopulateListBox; end; const sDefaultFilterText = 'Filter (* as wild)'; var form6: Tform6; implementation {$R *.dfm} procedure Tform6.PopulateListBox; // AllTables muss auf die Liste der Tabellen für die aktive Datenbankverbindung gesetzt werden. var I: Integer; begin ListBox1.Items.Clear; for I := 0 to AllTables.Count - 1 do begin // Wenn kein Filter vorhanden ist oder die Tabelle dem Filter entspricht, Tabelle dem Listenfeld hinzufügen. if (EditFilter.Text = sDefaultFilterText) or MatchFilter(EditFilter.Text, AllTables[I]) then ListBox1.Items.Add(FMetaDataProvider.QuoteIdentifierIfNeeded(AllTables[I])); end; // Wenn das Listenfeld Einträge enthält, soll es aktiviert werden. if ListBox1.Count > 0 then ListBox1.Enabled := True; end; function Tform6.MatchFilter(FilterStr, TestStr: String): Boolean; var Pattern, EndPattern, TempStr: String; WildPos: Integer; begin Result := True; if FilterStr = '' then Exit; // Whitespace entfernen und in Großbuchstaben umwandeln. Pattern := UpperCase(Trim(FilterStr)); EndPattern := ''; //nichts bis gefunden // Auf Platzhalter überprüfen WildPos := AnsiPos('*', Pattern); if WildPos <> 0 then begin if WildPos < Length(Pattern) then //letztes Zeichen EndPattern := Copy(Pattern, WildPos+1, MaxInt); //beliebiger Text nach Platzhalter Pattern := Copy(Pattern, 1, WildPos-1); end; if (Pattern <> '') and (AnsiPos(Pattern, UpperCase(TestStr)) <> 1) then Result := False else if EndPattern <> '' then begin TempStr := AnsiRightStr(TestStr, Length(EndPattern)); if AnsiPos(EndPattern, UpperCase(TempStr)) <> 1 then Result := False; end; end; procedure Tform6.ButtonApplyClick(Sender: TObject); var X, Y: Integer; begin // Die Aktualisierung der Client-Datenmenge wird vom Provider ausgeführt. ClientDataSet1.ApplyUpdates(-1); Y := Self.Top + Self.ButtonApply.Top; X := Self.Left + Self.ButtonApply.Left; // Benutzer fragen, ob die Daten im Gitter aktualisiert werden sollen. if MessageDlgPos('Refresh?',mtCustom, [mbYes, mbNo], 0, X, Y) = mrYes then begin ClientDataSet1.Close; ClientDataSet1.Open; end; end; procedure Tform6.CheckBoxActiveClick(Sender: TObject); begin ClientDataSet1.Active := CheckBoxActive.Checked end; procedure Tform6.ClientDataSet1BeforeClose(DataSet: TDataSet); begin // Falls ein Formular für die Anzeige der Tabellenzelle vorhanden ist, wird es freigegeben. if Assigned(MemoForm) then begin MemoForm.DBMemoCurrentField.DataField := ''; if MemoForm.Visible then MemoForm.Close; end; end; procedure Tform6.ComboBoxConnectionsCloseUp(Sender: TObject); begin // Wurde eine Auswahl getroffen? if ComboBoxConnections.ItemIndex = -1 then Exit; // Hilfsobjekte initialisieren. if not Assigned(AllTables) then AllTables := TStringList.Create; if Assigned(FMetaDataProvider) then FreeAndNil(FMetaDataProvider); // Falls eine geöffnete Verbindung vorhanden ist, soll sie geschlossen werden. Anzeigen, dass die Verbindung nicht aktiv ist. if SQLConnection1.Connected then SQLConnection1.Close; CheckBoxActive.Checked := False; // Die ausgewählte Datenbankverbindung öffnen. SQLConnection1.ConnectionName := ComboBoxConnections.Items[ComboBoxConnections.ItemIndex]; SQLConnection1.LoadParamsOnConnect := True; SQLConnection1.LoginPrompt := False; SQLConnection1.Open; SQLConnection1.GetTableNames(AllTables, False); //Liste der Tabellen aus der Datenbank abrufen // Metadaten für die ausgewählte Verbindung ermitteln. FMetaDataProvider := TDBXDataExpressMetaDataProvider.Create; FMetaDataProvider.Connection := sqlconnection1.DBXConnection; //auf die geöffnete Verbindung setzen FMetaDataProvider.Open; // Das Listenfeld mit den Tabellen dieser Datenbankverbindung füllen. PopulateListBox; // Status einiger Dialogfeldelemente initialisieren. SQLDataSet1.CommandText := ''; EditSQL.Text := ''; CheckBoxActive.Enabled := False; ButtonApply.Enabled := False; end; procedure Tform6.EditFilterChange(Sender: TObject); begin if SQLConnection1.Connected then PopulateListBox; //Tabellenlistenfeld entsprechend des neuen Filtertexts erneut füllen end; procedure Tform6.EditFilterEnter(Sender: TObject); begin EditFilter.Text := ''; end; procedure Tform6.EditFilterExit(Sender: TObject); begin if EditFilter.Text = '' then EditFilter.Text := 'Filter (* as wild)'; end; procedure Tform6.EditSQLChange(Sender: TObject); begin SQLDataSet1.CommandText := EditSQL.Text; end; procedure Tform6.FormDestroy(Sender: TObject); begin // Die Verbindung schließen. if SQLConnection1.Connected then SQLConnection1.Close; // Objekte freigeben. if Assigned(FMetaDataProvider) then FreeAndNil(FMetaDataProvider); if Assigned(MemoForm) then FreeAndNil(MemoForm); if Assigned(AllTables) then FreeAndNil(AllTables); end; procedure Tform6.DBGrid1CellClick(Column: TColumn); begin if ClientDataSet1.Active then begin // Wenn das Formular nicht angezeigt wird, wird es erstellt. if not Assigned(MemoForm) then begin MemoForm := TFormCurrentField.Create(Self); MemoForm.DBMemoCurrentField.DataSource := DataSource1; //Datenquelle festlegen end; // Formular genau unterhalb des Hauptdialogfeldes positionieren. MemoForm.Top := Self.Top+Self.Height; MemoForm.Left := Self.Left; MemoForm.Visible := False; MemoForm.Visible := True; MemoForm.DBMemoCurrentField.DataField := Column.FieldName; // Im Titel Informationen über das Feld anzeigen MemoForm.Caption := Format('Field Name: %s / Record Num: %d',[Column.FieldName, DBGrid1.DataSource.DataSet.RecNo]); MemoForm.Width := Self.Width; end; end; procedure tform6.FormCreate(Sender: TObject); var IniFile: TIniFile; SectionsList: TStringList; //für die Verbindungsliste TempStr: String; I: Integer; begin EditFilter.Text := sDefaultFilterText; // Informationen über die aktuellen Datenbankverbindungen ermitteln IniFile := TIniFile.Create(GetConnectionRegistryFile); // Eine Liste der verfügbaren Datenbankverbindungen ermitteln SectionsList := TStringList.Create; IniFile.ReadSections(SectionsList); // Die Verbindungen in das Kombinationsfeld einfügen // Jede gültige Verbindung sollte mit den Zeichen 'CONNECTION' enden. // Nur diese Verbindungen werden hinzugefügt. SectionsList.Sort; for I := 0 to SectionsList.Count - 1 do begin TempStr := UpperCase(AnsiRightStr(SectionsList[I], Length('connection'))); if TempStr = 'CONNECTION' then begin ComboBoxConnections.Items.Add(SectionsList[I]); end; end; // Nicht mehr benötigte Objekte freigeben FreeAndNil(IniFile); FreeAndNil(SectionsList); end; procedure tForm6.listbox1DblClick(Sender: TObject); var s : string; FieldNamesList: TStringList; SQLStmt: String; I: Integer; begin // Eine Tabelle ist jetzt ausgewählt, daher nun die entsprechenden Steuerelemente aktivieren. CheckBoxActive.Enabled := True; ButtonApply.Enabled := True; TableName := ListBox1.Items[ListBox1.ItemIndex]; //Tabellennamen abrufen // Feldnamen (Spaltennamen) für diese Tabelle abrufen. FieldNamesList := TStringList.Create; FieldNamesList.Clear; SQLConnection1.GetFieldNames(TableName, FieldNamesList); if FieldNamesList.Count > 0 then begin SQLStmt := 'select '; for I := 0 to FieldNamesList.Count - 1 do if s = '' then s := FieldNamesList[I] else s := s + ',' + FieldNamesList[I]; SQLStmt := SQLStmt + s + ' from '+TableName; end else // Feldnamen nicht gefunden, daher '*' verwenden SQLStmt := 'select * from '+TableName; FreeAndNil(FieldNamesList); // SQL-Anweisung zum Abrufen aller Tabellendaten erstellen. EditSQL.Text := SQLStmt; // CommandText auf SQL-Anweisung setzen. SQLDataSet1.CommandText := EditSQL.Text; if ClientDataSet1.Active then ClientDataSet1.Close; ClientDataSet1.Open; CheckBoxActive.Checked := True; end; end. Falls du noch schlafen gehst, :-) wünsche ich gute Nacht & Danke für alles |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz