![]() |
Datenbank: Paradox • Version: 7 • Zugriff über: Query, DataSource
Paradox-Feldtypen zuweisen
Hallo,
könnt Ihr bitte mal sehen, ob ich die richtigen Feldtypen gewählt habe: Feldname Typ MwSt N EAN N EKpreis $ VKnetto $ VKbrutto $ Anfangsbest N Abgang N Vielen Dank! Gruß Lombi |
Re: Paradox-Feldtypen zuweisen
N? $? :gruebel:
|
Re: Paradox-Feldtypen zuweisen
Hallo Lombi,
als Bestand und Abgang könntest du wohl besser I(nteger) nehmen. Ansonsten ist N(umerisch) und $(Währung) wohl OK. |
Re: Paradox-Feldtypen zuweisen
Hallo MrSpock,
das Problem ist, dass ich nach dem Compillieren für einige der Felder Meldungen erhalte, wie z.B.: 'EditEAN' ist kein gültiger Fließkommawert für Feld 'EAN' Was stimmt denn bei den folgenden Codes nicht?
Delphi-Quellcode:
Danke für die Hilfe!
...
QArtikel.FieldByName('EAN').AsString := EditEAN.Text //n(umerisch)? QArtikel.FieldByName('MwST').AsString := CBMwSt.Text //n(umerisch)? QArtikel.FieldByName('EKPreis').AsString := EditEKPreis.Text //$(Währung)? QArtikel.FieldByName('VKnetto').AsString := EditVKPreis.Text //$ (Währung)? QArtikel.FieldByName('Anfangsbestand').AsInteger := EditAbest.Text //I(nteger)? ... Gruß Lombi |
Re: Paradox-Feldtypen zuweisen
Hallo Lombi,
wenn du Feldkomponenten eines BDE DataSets mit Werten belegst, dann solltest du die passende property verwenden - Currency-Werte (nicht BCD) werden so zugewiesen:
Delphi-Quellcode:
Ob die EAN nicht besser als String gespeichert wird?
var
dValue: Double; begin if TryStrToFloat(EditEKPreis.Text, dValue) then QArtikel.FieldByName('EKPreis').AsFloat := dValue else QArtikel.FieldByName('EKPreis').Clear; Grüße vom marabu |
Re: Paradox-Feldtypen zuweisen
Hi marabu,
wie bitte werden numerische Felder zugewiesen? .AsString? 'EAN' habe ich auf (A)lphanumerisch geändert. Erhalte leider immer noch Fehlermeldungen: undefinierter Bezeichner:'TryStrToFloat' Ungültiger Wert für Feld 'MwSt' 'EditABest' ist kein gültiger Integerwert für Feld 'Anfangsbestand' Hab's bei den Mengen auch schon ohne Erfolg mit (N)umerisch versucht! Viele Grüße Lombi |
Re: Paradox-Feldtypen zuweisen
Hallo LOMBI,
bei Dir herrscht wohl noch ein bisschen Caos bezüglich der Datentypen. N Numerisch tab.FieldByName('MwSt').AsFloat := 16.0; tab.FieldByName('MwSt').AsFloat := StrToFloat('16.0'); I Integer tab.FieldByName('Bestand').AsInteger := StrToInt(editBestand.Text); L Logisch tab.FieldByName('logik').AsBoolean := 'falsch'; // oder 'wahr' A Alphanumer. tab.FieldByName('Suchtext').AsString := EditSuchtext.Text; Währungsfelder verwende ich nicht, da bevorzuge ich den Typ N Bestand kann auch vom Typ N sein, wenn Nachkomma-Werte vorkommen dürfen z.B. Bestand = 30.5 Meter mfg eddy |
Re: Paradox-Feldtypen zuweisen
Hallo eddy,
da hat sich noch ein Fehler eingeschlichen:
Delphi-Quellcode:
{L Logisch}
tab.FieldByName('logik').AsBoolean := False; // oder True ohne Anführungsstriche |
Re: Paradox-Feldtypen zuweisen
Hallo Lombi,
eventuell gibt es die Funktion TryStrToFloat() unter D3 nicht - hier ein preiswerter Ersatz:
Delphi-Quellcode:
Grüße vom marabu
function TryStrToFloat(const S: string; out Value: Extended): Boolean;
var code: Integer; begin Val(S, Value, code); Result := Code = 0; end; |
Re: Paradox-Feldtypen zuweisen
Moin :-)
@marabu: Deine Funktion wird bei der deutschen Schreibweise eines Gleitkommawertes (23,456)immer FALSE zurückgeben ;-) Die Funktion müsste dann etwas umgeändert werden:
Delphi-Quellcode:
oder diese Funktion benutzen:
function TryStrToFloat(S: string; out Value: Extended): Boolean;
var code: Integer; begin //--Komma durch Punkt ersetzen S:= StringReplace(S, ',','.',[]); Val(S, Value, code); Result := (Code = 0); end;
Delphi-Quellcode:
function IstGleitkommazahl(S: String; out Value: Extended): Boolean;
begin Result := TextToFloat(PChar(S), Value, fvExtended); end; |
Re: Paradox-Feldtypen zuweisen
Ansatt die Kommas zu ersetzen könnte man Delphi auch anweisen das komma als Dezimaltrenner zu verwenden:
Delphi-Quellcode:
DecimalSeparator := ',';
|
Re: Paradox-Feldtypen zuweisen
Zitat:
|
Re: Paradox-Feldtypen zuweisen
Hallo raiguen,
Zitat:
Delphi-Quellcode:
Danke für deine Aufmerksamkeit.
function TryStrToFloat(const S: String; var Value: Extended): Boolean;
begin Result := TextToFloat(PChar(S), Value, fvExtended); end; marabu |
Re: Paradox-Feldtypen zuweisen
Vielen Dank für das gezeigte Interesse.
Delphi-Quellcode:
Mit dieser Funktion komme ich leider nicht klar. Damit erhalte ich die Meldung: "Ungenügende Forward- oder External-Deklaration".
type
TFArtikelListe = class(TForm) ... function TryStrToFloat(const S: String; var Value: Extended): Boolean; Lombi |
Re: Paradox-Feldtypen zuweisen
Hallo Lombi,
TryStrToFloat() ist keine Methode deiner Form sondern eine frei verwendbare Funktion. Nimm sie aus der Klassendeklaration heraus und stelle sie an den Anfang der implementation section, wenn du keine eigene Unit für solche Funktionen in deinem Projekt hast. Grüße vom marabu |
Re: Paradox-Feldtypen zuweisen
Hallo marabu,
schön, von Dir zu hören. Ich hab's nun irgendwie ohne die Funktion TryStrToFloat geschafft: Meine Lösung:
Delphi-Quellcode:
Übrigens verwende ich jetzt für Währungs- und Bestandsfelder den Typ
procedure TFArtikelListe.BtnNeuClick(Sender: TObject);
var Value: Double; begin FArtikel.Show; with FArtikel do begin QueryArtikel.SQL.Text := 'SELECT * FROM Artikel'; QueryArtikel.Open; QueryArtikel.Append; QueryArtikel.FieldByName('EAN').AsString := EditEAN.Text; QueryArtikel.FieldByName('ArtBez').AsString := EditBez.Text; QueryArtikel.FieldByName('MwSt').AsFloat := Value; QueryArtikel.FieldByName('EKpreis').AsFloat := Value; QueryArtikel.FieldByName('VKbrutto').AsFloat := Value; QueryArtikel.FieldByName('Anfangsbestand').AsFloat := Value; end; (n)umerisch. Lombi |
Re: Paradox-Feldtypen zuweisen
Hallo Lombi,
im Hinblick auf deinen baldigen Umstieg auf ein RDBMS solltest du dir vielleicht schon einmal angewöhnen mit einem leeren result set zu arbeiten, wenn du sowieso nur Insert() oder Append() benutzen möchtest:
Delphi-Quellcode:
Freundliche Grüße vom marabu
procedure TFArtikelListe.BtnNeuClick(Sender: TObject);
var Value: Double; begin FArtikel.Show; with FArtikel.QueryArtikel do begin SQL.Text := 'SELECT * FROM Artikel WHERE 1 = 0'; Open; Append; FieldByName('EAN').AsString := EditEAN.Text; // ... Post; end; end; |
Re: Paradox-Feldtypen zuweisen
Delphi-Quellcode:
Hallo marabu,
SQL.Text := 'SELECT * FROM Artikel WHERE 1 = 0';
mit der Änderung des SQL.Textes sind die gespeicherten Daten im DBGrid nicht mehr sichtbar! Grüße Lombi |
Re: Paradox-Feldtypen zuweisen
Hallo Lombi,
aus der Abfolge deiner Befehle in Beitrag #16 habe ich geschlossen, dass du die dort verwendete Query nur für den Append-Befehl benötigst. Wenn die gleiche Query ein DBGrid mit Daten versorgt, dann vergiss meinen Hinweis auf den leeren result set, aber überdenke mal, warum du direkt vor dem Append kurz die Puffer leerst (durch erneutes Zuweisen eines SQL-Statements) und die Query wieder neu aufbaust (durch Open). Grüße vom marabu |
Re: Paradox-Feldtypen zuweisen
Danke für den Hinweis!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz