Einzelnen Beitrag anzeigen

Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#27

Re: Datenbankeinträge in ComboBoxen zur Anzeige bringen.

  Alt 31. Mär 2009, 18:54
Zitat:
brauchst du nicht. Die Felder werden durch das Open eingelesen. hast du vieleicht noch eine Sortierung in der Query eingetragen welche bei leerer Query auch ein fehlendes Feld anmeckert ?
Ich weiß, ich hatte mal am Anfang dort Felder eingetragen, wodurch dann ein so ähnlicher Fehler entstanden ist.

Was meinst Du mit sonstiger Sortierung. Hier mal der komplette Code. Im oberen Bereich Frage ich die gesamte Tabelle ab, um ein VST zu füllen. Im unteren Bereich, ändere ich ja dann den SQL Code und frage nur nach dem Feld Ereignis. Vieleicht kann man ja anhand des Code´s was erkenne.

Delphi-Quellcode:
if ServiceGetStatus('', 'FirebirdGuardianDefaultInstance') = 4 then
  begin
  QryMB256PLUS.SQL.Clear;
  QryMB256PLUS.SQL.Text := 'Select * From MB256PLUS';
  if not QryMB256PLUS.Active then begin
    iError := 0;
    Repeat
      Try
        QryMB256PLUS.Open;
      Except
        on e : Exception Do begin
          sMessage := e.Message;
          Inc(iError);
          Application.ProcessMessages;
          Sleep(1000);
        end;
      end;
    until QryMB256PLUS.Active or (iError > 5); // <- bitte ausprobieren, ob 5 reicht oder eventuell höher sein muss.
    if iError > 5 then begin
      ShowMessage('Die Datenbank konnte mit ' + IntToStr(iError) + ' Versuchen nicht geöffnet werden.'
      + #13 + 'Die letzte Fehlermeldung lautete: ' + sMessage);
      Application.Terminate; // <- oder sonstige Fehlerbehandlung.
    end;
  end;
    VST.BeginUpdate;
    VST.Clear;
    QryMB256PLUS.Last;
    PBFortschritt.Max := QryMB256PLUS.RecordCount;

    for IAnzahl := 0 to 4000 do
      begin
        QryMB256PLUS.Prior;
      end;

    while not QryMB256PLUS.EOF do
      begin
        Daten := TOMB256PLUS.Create;
          with Daten do
            begin
              Daten.ID := QryMB256PLUS.FieldByName('ID').AsInteger;
              Daten.LfdNr := QryMB256PLUS.FieldByName('LfdNr').AsInteger;
              Daten.Datum := QryMB256PLUS.FieldByName('Datum').AsString;
              Daten.Uhrzeit := QryMB256PLUS.FieldByName('Uhrzeit').AsString;
              Daten.Ereignis := QryMB256PLUS.FieldByName('Ereignis').AsString;
              Daten.Teilnehmer := QryMB256PLUS.FieldByName('Teilnehmer').AsString;
              Daten.Bereich := QryMB256PLUS.FieldByName('Bereich').AsString;
            end;
          VST.AddChild(nil,Daten);

          if PBFortschritt.Visible = False then
          PBFortschritt.Visible := true;
          PBFortschritt.Position := QryMB256PLUS.RecNo;

          QryMB256PLUS.Next;
        end;
      VST.EndUpdate;
      VST.ScrollIntoView(VST.GetLast, true);

      with QryMB256PLUS do begin
      QryMB256PLUS.SQL.Clear;

      QryMB256PLUS.SQL.Text := 'SELECT FIRST 5 * FROM MB256PLUS WHERE EREIGNIS = :Ereignis';
      QryMB256PLUS.ParamByName('Ereignis').asString:= 'Einbruch';


      QRYMB256PLUS.Open;
      while Not eof do
      begin
        CBAlarme.Items.Add(FieldByName('Ereignis').AsString);
        QryMB256PLUS.Next;
      end;
      QryMB256PLUS.Active := false;
      QryMB256PLUS.Close;
      end;
      CBAlarme.ItemIndex := 1;
      PBFortschritt.Visible := false;
      MMStatus.Text := 'Datenbank geladen';
      MMStatus.Color := clLime;
      QryMB256PLUS.Close;
  end;
end;
Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat