Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Paradox-Feldtypen zuweisen (https://www.delphipraxis.net/69269-paradox-feldtypen-zuweisen.html)

LOMBI 12. Mai 2006 18:00

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

Dax 12. Mai 2006 18:03

Re: Paradox-Feldtypen zuweisen
 
N? $? :gruebel:

MrSpock 12. Mai 2006 18:08

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.

LOMBI 12. Mai 2006 19:31

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:
...
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)?
...
Danke für die Hilfe!

Gruß
Lombi

marabu 12. Mai 2006 20:09

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:
var
  dValue: Double;
begin
  if TryStrToFloat(EditEKPreis.Text, dValue)
    then QArtikel.FieldByName('EKPreis').AsFloat := dValue
    else QArtikel.FieldByName('EKPreis').Clear;
Ob die EAN nicht besser als String gespeichert wird?

Grüße vom marabu

LOMBI 13. Mai 2006 11:14

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

eddy 13. Mai 2006 13:37

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

MrSpock 13. Mai 2006 14:06

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

marabu 13. Mai 2006 15:17

Re: Paradox-Feldtypen zuweisen
 
Hallo Lombi,

eventuell gibt es die Funktion TryStrToFloat() unter D3 nicht - hier ein preiswerter Ersatz:

Delphi-Quellcode:
function TryStrToFloat(const S: string; out Value: Extended): Boolean;
var
  code: Integer;
begin
  Val(S, Value, code);
  Result := Code = 0;
end;
Grüße vom marabu

raiguen 14. Mai 2006 18:10

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:
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;
oder diese Funktion benutzen:
Delphi-Quellcode:
function IstGleitkommazahl(S: String; out Value: Extended): Boolean;
begin
  Result := TextToFloat(PChar(S), Value, fvExtended);
end;

mkinzler 14. Mai 2006 19:15

Re: Paradox-Feldtypen zuweisen
 
Ansatt die Kommas zu ersetzen könnte man Delphi auch anweisen das komma als Dezimaltrenner zu verwenden:

Delphi-Quellcode:
DecimalSeparator := ',';

raiguen 14. Mai 2006 21:44

Re: Paradox-Feldtypen zuweisen
 
Zitat:

Zitat von mkinzler
Ansatt die Kommas zu ersetzen könnte man Delphi auch anweisen das komma als Dezimaltrenner zu verwenden:

Delphi-Quellcode:
DecimalSeparator := ',';

Hat keine Auswirkung, wenn Gleitkommazahlen in ein normalen EditFeld eingeben werden, oder irgendeine andere StringVariable eine Zahl mit Komma als Dezimaltrenner enthält! Die Umwandlung in eine FloatVariable wird auf jeden Fall am Komma scheitern.

marabu 15. Mai 2006 21:36

Re: Paradox-Feldtypen zuweisen
 
Hallo raiguen,

Zitat:

Zitat von raiguen
Deine Funktion wird bei der deutschen Schreibweise eines Gleitkommawertes (23,456)immer FALSE zurückgeben

da hast du Recht. Da bei mir D3 nicht installiert ist, habe ich mal D2 angeworfen und noch einen Fehler entdeckt - die calling convention "out" wird wahrscheinlich auch nicht kompiliert. Und weil es mir um den upgrade path geht, schlage ich die Umbenennung deiner Funktion IstGleitkommazahl() vor:

Delphi-Quellcode:
function TryStrToFloat(const S: String; var Value: Extended): Boolean;
begin
  Result := TextToFloat(PChar(S), Value, fvExtended);
end;
Danke für deine Aufmerksamkeit.

marabu

LOMBI 17. Mai 2006 15:15

Re: Paradox-Feldtypen zuweisen
 
Vielen Dank für das gezeigte Interesse.

Delphi-Quellcode:
type
  TFArtikelListe = class(TForm)
...
    function TryStrToFloat(const S: String; var Value: Extended): Boolean;
Mit dieser Funktion komme ich leider nicht klar. Damit erhalte ich die Meldung: "Ungenügende Forward- oder External-Deklaration".

Lombi

marabu 18. Mai 2006 09:44

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

LOMBI 19. Mai 2006 13:46

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:
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;
Übrigens verwende ich jetzt für Währungs- und Bestandsfelder den Typ
(n)umerisch.

Lombi

marabu 19. Mai 2006 20:22

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:
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;
Freundliche Grüße vom marabu

LOMBI 20. Mai 2006 12:45

Re: Paradox-Feldtypen zuweisen
 
Delphi-Quellcode:
SQL.Text := 'SELECT * FROM Artikel WHERE 1 = 0';
Hallo marabu,

mit der Änderung des SQL.Textes sind die gespeicherten Daten im DBGrid
nicht mehr sichtbar!

Grüße
Lombi

marabu 20. Mai 2006 13:52

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

LOMBI 20. Mai 2006 16:22

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