AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken TDBXTypes.WideString-Wertetyp
Thema durchsuchen
Ansicht
Themen-Optionen

TDBXTypes.WideString-Wertetyp

Ein Thema von gee21 · begonnen am 3. Jan 2013 · letzter Beitrag vom 4. Jan 2013
Antwort Antwort
Seite 3 von 3     123   
gee21

Registriert seit: 3. Jan 2013
199 Beiträge
 
Delphi 10.4 Sydney
 
#21

AW: TDBXTypes.WideString-Wertetyp

  Alt 4. Jan 2013, 01:50
Es friert eben leider das Programm ein bevor ich zu der funtion komme,
Robert
  Mit Zitat antworten Zitat
gee21

Registriert seit: 3. Jan 2013
199 Beiträge
 
Delphi 10.4 Sydney
 
#22

AW: TDBXTypes.WideString-Wertetyp

  Alt 4. Jan 2013, 01:51
Merkwürdig jetzts gings wieder als wäre nichts gewesen. jedoch hält er beim brekpoint nicht an....?
Robert
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 3. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#23

AW: TDBXTypes.WideString-Wertetyp

  Alt 4. Jan 2013, 01:57
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ß
Volker Zeller

Geändert von Volker Z. ( 4. Jan 2013 um 02:02 Uhr)
  Mit Zitat antworten Zitat
gee21

Registriert seit: 3. Jan 2013
199 Beiträge
 
Delphi 10.4 Sydney
 
#24

AW: TDBXTypes.WideString-Wertetyp

  Alt 4. Jan 2013, 02:05
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 = 'CONNECTIONthen
   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
Robert
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es 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

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz