Guten Tag Community,
da mir die Suche nicht wirklich weitergeholfen hat, muss ich wohl ein neues Thema erstellen.
Mein Problem liegt darin, dass ich beim Ausführen meines Programmes die folgendeFehlermeldung bekomme
---------------------------
Bestandsliste
---------------------------
ParametertblBestandsliste.Behaelter hat keinen Standardwert.
---------------------------
OK
---------------------------
Diese Fehlermeldung kommt allerdings spät nach der Initialisierung der
DB Komponenten, während Labels und Co. bennant werden
Hier mal der Code in dem die Datenbank initialisiert wird:
Code:
Function InitDB: Boolean;
var
Datenbankname, ConnString: String;
Begin
Result := true;
Try
Con1 := TADOConnection.Create(Nil);
qryDat := TADOQuery.Create(Nil);
qryWork := TADOQuery.Create(Nil);
qryBestand := TADOQuery.Create(Nil);
qryStamm := TADOQuery.Create(Nil);
dsBestand := TDataSource.Create(Nil);
dsWork := TDataSource.Create(Nil);
dsDat := TDataSource.Create(Nil);
dsStamm := TDataSource.Create(Nil);
Datenbankname := DBPath;
ConnString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + Datenbankname +
';Mode=share deny none;Persist Security Info=False';
SqlText :=
'SELECT tblBestandsliste.ArtName, tblBestandsliste.ArtAnzahl, tblLagerraum.Lagerraum, tblBehaelter.Behaeltername,'
+ ' tblKategorie1.KatName, tblKategorie2.KatName, tblBestandsliste.BeschFeld, tblBestandsliste.AnlagFeld,'
+ ' tblBestandsliste.EinzelPreis, tblBestandsliste.Lieferant, tblBestandsliste.LieferDatum,'
+ ' tblBestandsliste.EintragsDatum, tblBestandsliste.ID FROM'
+ ' ((tblLagerraum INNER JOIN(tblBehaelter INNER JOIN tblBestandsliste ON tblBehaelter.ID = tblBestandsliste.Behaelter)ON'
+ ' tblLagerraum.ID = tblBestandsliste.Lagerraum) INNER JOIN tblKategorie1 ON tblBestandsliste.Kategorie1 = tblKategorie1.ID)'
+ ' INNER JOIN tblKategorie2 ON tblBestandsliste.Kategorie2 = tblKategorie2.ID';
Con1.Connected := False;
Con1.Provider := 'Microsoft.Jet.OLEDB.4.0';
Con1.ConnectionString := ConnString;
Con1.LoginPrompt := False;
Con1.Connected := true;
qryBestand.SQL.Text := 'select * from tblBestandsliste'{SqlText};
dsBestand.DataSet := qryBestand;
dsBestand.Enabled := true;
qryStamm.SQL.Text := 'select * from tblLagerraum';
dsStamm.DataSet := qryStamm;
dsStamm.Enabled := true;
qryWork.SQL.Text := 'select * from tblBehaelter';
dsWork.DataSet := qryWork;
dsWork.Enabled := true;
qryDat.Connection := Con1;
qryWork.Connection := Con1;
qryBestand.Connection := Con1;
qryStamm.Connection := Con1;
qryStamm.Open;
qryWork.Open;
qryBestand.Open;
FrmMAin.Grid.DataSource := dsBestand;
Except
Result := False;
End;
End;
Den
SQL Text der qryBestand habe ich Testweise durch einen kurzen Text ersetzt, allerdings erfolgslos.
Hier die Stelle im Programm an dem die Fehlermeldung kommt (letzte Zeile)
Code:
procedure TFrmMain.InitForm();
// ******************************************************************************
// *********************** Form Initialisieren **********************************
// ******************************************************************************
var
i, ArtAnz: integer;
begin
GridMainShow();
for i := 0 to 5 do // Grid.Columns.Count - 2 do
cbxSearch.Items.Add(Grid.Columns[i].Title.Caption);
cbxSearch.Items.Delete(1);
cbxSort.Items.Add(Grid.Columns[0].Title.Caption);
cbxSort.Items.Add(Grid.Columns[2].Title.Caption);
cbxSort.Items.Add(Grid.Columns[3].Title.Caption);
cbxSort.Items.Add('Kategorie');
cbxSearch.ItemIndex := 0;
cbxSort.ItemIndex := 0;
cbxSearch.DropDownCount := 11;
FeldNameSearch[0] := 'ArtName';
FeldNameSearch[1] := 'Lagerraum';
FeldNameSearch[2] := 'Behaeltername';
FeldNameSearch[3] := 'tblKategorie1.KatName';
FeldNameSearch[4] := 'tblKategorie2.KatName';
FeldNameSort[0] := 'ArtName';
FeldNameSort[1] := 'Lagerraum';
FeldNameSort[2] := 'Behaeltername';
FeldNameSort[3] := 'tblKategorie1.KatName, tblKategorie2.KatName';
Search := '';
SortBy := 'ArtName';
SearchAfter := 'ArtName';
cbxSearch.ItemIndex := 0;
cbxSort.ItemIndex := 0;
lblSearch.Caption := 'Suchbegriff';
edtSearch.Text := '';
In einem Testprogramm, dass ich eben schnell erstellt habe geht alles wunderbar mit dem langen String.
Hier auch nochmal der Codes des Testprogrammes (Die Einrichtung der
DB Komponenten hab ich diesmal nicht über den Code gemacht)
Code:
procedure TForm2.FormCreate(Sender: TObject);
begin
ADOQuery1.SQL.Text :=
'SELECT tblBestandsliste.ArtName, tblBestandsliste.ArtAnzahl, tblLagerraum.Lagerraum, tblBehaelter.Behaeltername,' +
' tblKategorie1.KatName, tblKategorie2.KatName, tblBestandsliste.BeschFeld, tblBestandsliste.AnlagFeld,' +
' tblBestandsliste.EinzelPreis, tblBestandsliste.Lieferant, tblBestandsliste.LieferDatum,' +
' tblBestandsliste.EintragsDatum, tblBestandsliste.ID FROM' +
' ((tblLagerraum INNER JOIN(tblBehaelter INNER JOIN tblBestandsliste ON tblBehaelter.ID = tblBestandsliste.Behaelter)ON'
+ ' tblLagerraum.ID = tblBestandsliste.Lagerraum) INNER JOIN tblKategorie1 ON tblBestandsliste.Kategorie1 = tblKategorie1.ID)'
+ ' INNER JOIN tblKategorie2 ON tblBestandsliste.Kategorie2 = tblKategorie2.ID';
ADOQuery1.Open;
end;
Momentan echt ratlos
Edit:
Also wenn ich im Original Code den Original
SQL Text wieder einsetze (qryBestand.SQL.Text := SQLText
kommt folgende Fehlermeldung:
---------------------------
Benachrichtigung über Debugger-
Exception
---------------------------
Im Projekt Bestandsliste.exe ist eine
Exception der Klasse EOleException mit der Meldung 'Für mindestens einen erforderlichen Parameter wurde kein Wert angegeben' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------
Dann stürzt das Programm schon beim Öffnen der
Query ab.
Vielleicht hilft das ja noch