AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi ADOQuery meckert bei leeren Strings
Thema durchsuchen
Ansicht
Themen-Optionen

ADOQuery meckert bei leeren Strings

Ein Thema von Gargamel · begonnen am 18. Jan 2008 · letzter Beitrag vom 18. Jan 2008
Antwort Antwort
Seite 1 von 2  1 2      
Gargamel

Registriert seit: 19. Mär 2007
171 Beiträge
 
#1

ADOQuery meckert bei leeren Strings

  Alt 18. Jan 2008, 14:08
Datenbank: Access 2003 • Version: 2003 • Zugriff über: ADO
Hallo

Wenn ich alle Datensätze nach einer Abfrage auflisten will und ein leerer String ist dabei, meckert AdoQuery.
Meldung: "Variante des Typs (NULL) konnte nicht in Typ (String) konvertiert werden"
Hier ist der Code:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var numRecs:integer;
begin
  ListBox2.Clear;
 
  AdoQuery1.SQL.Clear;
  AdoQuery1.SQL.Add('select * from testtabelle order by testfeld');
  AdoQuery1.Active:=true;
  AdoQuery1.ExecSQL;
  numRecs:=ADOQuery1.RecordCount;

  if NumRecs > 0 then
  Begin
    ADOQuery1.First;
    while(ADOQuery1.RecNo < numRecs) do
    Begin
      ListBox2.Items.Add(ADOQuery1.FieldValues['testfeld']);
      ADOQuery1.Next;
    End;
    ListBox2.Items.Add(ADOQuery1.FieldValues['testfeld']);
  End;
end;

Viele Grüße
Gargi
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: ADOQuery meckert bei leeren Strings

  Alt 18. Jan 2008, 14:12
Prüfe vorher mit isempty ab.

Und verwende nicht RecordCount, sondern lass eine kopfabweisende schleife bis Query.eof laufen.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von mikhal
mikhal

Registriert seit: 11. Sep 2003
Ort: Linz am Rhein
796 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: ADOQuery meckert bei leeren Strings

  Alt 18. Jan 2008, 14:17
Verwende statt
ADOQuery1.FieldValues['testfeld'] besser
ADOQuery1.FindField('testfeld').AsString Dann solltest du auch nicht mehr auf den Fehler laufen.

Grüße
Mikhal
Michael Kraemer
Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: ADOQuery meckert bei leeren Strings

  Alt 18. Jan 2008, 14:20
Hi,

Active := True oder Open, immer wenn eine Ergebnismenge zurückgegeben wird.
ExecSql in allen anderen Fällen.
Nie beides gleichzeitig verwenden.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ListBox2.Clear;
 
  with AdoQuery1 do
  begin
    SQL.Text := 'select * from testtabelle order by testfeld';
    Open;
    while not Eof do
    begin
      ListBox2.Items.Add(FieldByName('testfeld').AsString);
      Next;
    end;
    Close;
  end;
end;
Freundliche Grüße
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: ADOQuery meckert bei leeren Strings

  Alt 18. Jan 2008, 14:21
As Designed.

Mit FieldValues['testfeld'] bekommst du ein Variant zurück und eine Empty-Variant lässt sich nunmal nicht in einen String wandeln (Bedeutung SQL-nil <> '')
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Gargamel

Registriert seit: 19. Mär 2007
171 Beiträge
 
#6

Re: ADOQuery meckert bei leeren Strings

  Alt 18. Jan 2008, 14:32
Hallo

Herzlichen Dank für die vielen, sehr hilfreichen, Informationen.
Jetzt sieht der Code so aus:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ListBox2.Clear;
  
  AdoQuery1.SQL.Clear;
  AdoQuery1.SQL.Add('select * from testtabelle order by testfeld');
  AdoQuery1.Active:=true; // alternativ open

  while not AdoQuery1.EOF do
  Begin
    ListBox2.Items.Add(ADOQuery1.FieldByName('testfeld').AsString);
    ADOQuery1.Next;
  End;
end;
Mir ist aufgefallen, daß AdoQuery1.First nicht verwendet wurde. Kann es sein, daß bei einer neuen Abfrage der Datensatzzeiger immer auf den ersten Datensatz gesetzt wird?

Viele Grüße
Gargi
  Mit Zitat antworten Zitat
Benutzerbild von mikhal
mikhal

Registriert seit: 11. Sep 2003
Ort: Linz am Rhein
796 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: ADOQuery meckert bei leeren Strings

  Alt 18. Jan 2008, 14:33
Ja.

Grüße
Mikhal
Michael Kraemer
Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: ADOQuery meckert bei leeren Strings

  Alt 18. Jan 2008, 14:34
Zitat von Gargamel:
Kann es sein, daß bei einer neuen Abfrage der Datensatzzeiger immer auf den ersten Datensatz gesetzt wird?
Mir wäre nichts anderes bekannt. Aber was dieser Datensatz ist ist ohne ein "order by ..." im SQL-Statement unbestimmt.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: ADOQuery meckert bei leeren Strings

  Alt 18. Jan 2008, 14:34
... und wenn du SQL.Add() nur einmal verwendest, dann erspart die die Zuweisung an SQL.Text den Aufruf von Clear().
  Mit Zitat antworten Zitat
Gargamel

Registriert seit: 19. Mär 2007
171 Beiträge
 
#10

Re: ADOQuery meckert bei leeren Strings

  Alt 18. Jan 2008, 14:59
Jetzt habe ich noch eine generelle Frage an Euch. Es geht um die Sicherheit.

Folgendes habe ich vor:

Die Datenbank soll Leveldaten beinhalten. Ein Haus soll hier stehen, ein Baum dort, usw. ...
Der Ablauf ist so, daß die 3D-Engine eine DLL lädt, die wiederrum auf die Access-DB zugreift und alle relevanten Daten in eine geeignete Datenstruktur schreibt, die sich in der DLL befindet. Danach werden alle Elemente im 3D-Raum platziert. Da die DB nur zum Laden des Levels und zum Laden/Speichern von Spielständen genutzt werden soll, ist die Frage nach der Geschwindigkeit nicht gegeben.

Die Access-DB ist zwar passwortgeschützt, dennoch drängt sich mir die Frage auf, ob diese Vorgehensweise halbwegs sicher ist.
Nichts ist schlimmer, als daß der Spieler später die Leveldaten einfach so abändern kann.

Meine Frage ist also: Sollte ich so vorgehen oder habt Ihr noch andere Ideen?

PS: Die 3D-Engine kann ich bereits in Delphi auf einem Formular, alternativ auch ein TPanel, darstellen. Der Leveleditor wird so aufgebaut.

Viele Grüße
Gargi
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz