Schreiben des Quellcodes für Hilfsroutinen (dbExpress-Tutorial)
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);
Inhaltsverzeichnis |
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