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