Schreiben des Quellcodes für Hilfsroutinen (dbExpress-Tutorial)

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Tutorial: Mit dbExpress Datenbanken in einer Anwendung anzeigen und aktualisieren

Für die Ausführung der Anwendung sind einige Hilfsroutinen erforderlich.

Delphi

Fügen Sie zuerst am Ende des Bereichs type im interface-Abschnitt zwei als public deklarierte Funktionen hinzu:

  public
    { Public-Deklarationen }
    function MatchFilter(FilterStr, TestStr: String): Boolean;
    procedure PopulateListBox;

Nach dem Hinzufügen dieser Routinen zum interface-Abschnitt lässt sich mithilfe der Klassenvervollständigung dafür Skeleton-Code im implementation-Abschnitt erzeugen.

C++

Fügen Sie cdsmain.h diese beiden Member-Funktionen hinzu:

bool __fastcall MatchFilter(String FilterStr, String TestStr);
void __fastcall PopulateListBox(void);

MatchFilter

PopulateListBox ruft MatchFilter auf, um zu bestimmen, ob eine Tabelle aufgeführt werden soll oder nicht, d.h., ob der Tabellenname mit dem im TEdit-Steuerelement enthaltenen Filter übereinstimmt.

Delphi

Fügen Sie dem implementation-Abschnitt diese Funktion hinzu.

function TForm2.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;

C++

Fügen Sie cdsmain.h diese Member-Funktion hinzu:

// Feststellen, ob ein String mit dem Muster übereinstimmt
bool __fastcall TForm1::MatchFilter(String FilterStr, String TestStr)
{
  String Pattern, EndPattern, TempStr;
  int WildPos;

  bool Result = true;
  if (FilterStr.IsEmpty())
return false;

  // 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)
  {
if (WildPos < Pattern.Length()) //letztes Zeichen
//EndPattern = Copy(Pattern, WildPos+1, MaxInt); //beliebiger Text nach Platzhalter
EndPattern = Pattern.SubString(WildPos+1, MaxInt); //beliebiger Text nach Platzhalter
//Pattern = Copy(Pattern, 1, WildPos-1);
Pattern = Pattern.SubString(1, WildPos-1);
  }

  if (!Pattern.IsEmpty() && (AnsiPos(Pattern, UpperCase(TestStr)) != 1))
Result = false;
  else if (!EndPattern.IsEmpty())
  {
TempStr = AnsiRightStr(TestStr, EndPattern.Length());
if (AnsiPos(EndPattern, UpperCase(TempStr)) != 1)
Result = false;
  }
  return Result;
}

PopulateListBox

PopulateListBox fügt dem Listenfeld TListBox Tabellennamen aus der Liste der Tabellen hinzu. Die Tabellen müssen bereits in der String-Liste AllTables (TStringList) enthalten sein. PopulateListBox testet mit MatchFilter, ob der Tabellenname mit dem Filtertext übereinstimmt.

Delphi

procedure TForm2.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;

C++

// Listenfeld mit Tabellen füllen
void __fastcall TForm1::PopulateListBox(void)
{
  // AllTables muss auf die Liste der Tabellen für die aktive Datenbankverbindung gesetzt werden.
  int I;

  ListBox1->Items->Clear();
  for (I = 0; I < AllTables->Count; I++)
  {
    // Wenn kein Filter vorhanden ist oder die Tabelle dem Filter entspricht, Tabelle dem Listenfeld hinzufügen.
if ((EditFilter->Text == sDefaultFilterText) || MatchFilter(EditFilter->Text, AllTables->Strings[I]))
ListBox1->Items->Add(FMetaDataProvider->QuoteIdentifierIfNeeded(AllTables->Strings[I]));
  }

  // Wenn das Listenfeld Einträge enthält, soll es aktiviert werden.
  if (ListBox1->Count > 0)
ListBox1->Enabled = true;
}

Zurück

Schreiben des Quellcodes zur Behandlung von Unterereignissen

Weiter

Hinzufügen eines Formulars zum Anzeigen des Zellinhalts