AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi 100 x Fieldvalue durch Fieldbyname erstetzen?

100 x Fieldvalue durch Fieldbyname erstetzen?

Ein Thema von Karstadt · begonnen am 22. Mär 2006 · letzter Beitrag vom 23. Mär 2006
Antwort Antwort
Seite 1 von 2  1 2   
Karstadt

Registriert seit: 8. Nov 2005
788 Beiträge
 
#1

100 x Fieldvalue durch Fieldbyname erstetzen?

  Alt 22. Mär 2006, 09:57
Datenbank: MYSQL • Version: 4.1 • Zugriff über: Direkt
Hallo.

Bearbeite einen bestehenden Projekt. Soll ich 100 x Fieldvalue durch Fieldbyname erstetzen?

Was bringt mir das?

Kann ich bei jeden Feldtyp mit Fieldbyname().asstring arbeiten (Feldinhalt wird schon richtig sein)
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#2

Re: 100 x Fieldvalue durch Fieldbyname erstetzen?

  Alt 22. Mär 2006, 10:32
FieldByName bringt dir nichts bis gar nix, außer dass es lahmer ist.
Wenn du direkt auf den Index gehst ersparst du hier den ersten Schritt: Name -> Index -> Wert.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: 100 x Fieldvalue durch Fieldbyname erstetzen?

  Alt 22. Mär 2006, 10:34
Hallo,

dies solltest Du auf jeden Fall ändern. Zugriffe über Feldindexe sind zwar schneller als FieldByName, aber gefährlich. Denn wenn sich die uzugrunde liegende Datenmenge ändert (z.B. ein neues Feld im SELECT einer Query oder Strukturerweiterung oder Verscheieben der persistenten Felder in der Feldliste), greifst Du ja auf ganz andere Felder zu als erwartet.

Eine andere Lösung wäre das Generieren benannter TField-Objekte zur Laufzeit oder persistent. Das liegt in der Geschwindigkeit zwischen FieldByName und FieldIndex, aber ist die sicherste Methode, da Dir schon der Compiler nicht vorhandene Felder meldet. Mit FieldByName kannst Du Dich ja immer noch beim Feldnamen vertippen.

Und zu Deiner zweiten Frage: Eigentlich unterstützen fast alle Feldtypen AsString. Nur bei Zuweisungen solltest Du damit vorsichtig sein, denn manche Strings können nicht umgewandelt werden (oft Floatfelder).
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Thanatos81
(Gast)

n/a Beiträge
 
#4

Re: 100 x Fieldvalue durch Fieldbyname erstetzen?

  Alt 22. Mär 2006, 10:37
Naja, zwei Vorteile gibt es für FieldByName IMHO doch:
  1. Der Code ist lesbarer, und dadurch leichter zu warten
  2. Falls die selbe Komponente nicht immer exakt die gleiche Feldreihenfolge hat, greifst du immer auf das "richtige" Feld zu
  Mit Zitat antworten Zitat
Ulf346C

Registriert seit: 15. Okt 2003
Ort: Magdeburg
85 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#5

Re: 100 x Fieldvalue durch Fieldbyname erstetzen?

  Alt 22. Mär 2006, 10:44
Du greifst über die Spaltennummer zu

In einer SQL-Umgebung (und nicht nur da) ist es schon angebracht, die Datenfelder über den Feldnamen anzusprechen.
Sonst nimmst du dir die Möglichkeit, z.B. an der Struktur der Tabelle nachträglich etwas verändern zu können.

bei MySQL kann man im Prinzip alles per .asString machen. Die reine Lehre ist das aber nicht.
Delphi bietet die viel schönere Variante .asVariant, die ist in jedem Fall zu bevorzugen, wenn deine SQL-Implementation das unterstützt. Mit ZEOS geht das.

Wenn du einigermaßen Bombensicher Datensätze kopieren willst ohne die Feldnamen zu verwenden, nimm

Delphi-Quellcode:
var i: integer
    t: string;

for i := 0 to (tabelle1.fieldcount -1) do begin
  t := tabelle1.fields[i].fieldname;
  if not (tabelle2.findfield(t) = nil)
  then tabelle2.fieldbyname(t).asVariant := tabelle1.fieldbyname(t).asVariant
end;
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#6

Re: 100 x Fieldvalue durch Fieldbyname erstetzen?

  Alt 22. Mär 2006, 10:50
Zitat von Thanatos81:
Naja, zwei Vorteile gibt es für FieldByName IMHO doch:
  1. Der Code ist lesbarer, und dadurch leichter zu warten
  2. Falls die selbe Komponente nicht immer exakt die gleiche Feldreihenfolge hat, greifst du immer auf das "richtige" Feld zu
Als Anhänger von OO-Abbildung von DBs finde ich das Argument "Lesbarkeit" in Kombination mit DataSets mehr als fehl am Platz.
Einen String reinzuschmeißen, die Spalten suchen zu lassen nur um mit dem resultierenden Index endlich den Wert bekommen zu kommen,[1] klingt für mich nach (sorry) VB-Monk-Taktik.

[1]das alles nur um den SQL Text in irgendeinem Form/Frame/DM-Designer tippen zu können
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Karstadt

Registriert seit: 8. Nov 2005
788 Beiträge
 
#7

Re: 100 x Fieldvalue durch Fieldbyname erstetzen?

  Alt 22. Mär 2006, 12:49
Die meinungen gehen sehr weit auseinander

Auf jeden Feld ein index zu setzen ist doch nicht sinnvoll!

und as asVariant soll das langsammer sein als asString weil der Typ bei Variant nicht bestimmt ist.

die Frage ist soll ich die zwei Stunden investieren oder lieber so lassen wie das ist. Lesbar ist das auch. (Fieldvalue)
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: 100 x Fieldvalue durch Fieldbyname erstetzen?

  Alt 22. Mär 2006, 13:17
Zitat von Union:
Eine andere Lösung wäre das Generieren benannter TField-Objekte zur Laufzeit oder persistent. Das liegt in der Geschwindigkeit zwischen FieldByName und FieldIndex
Nein. Persistente Felder sind die schnellste Zugriffsmöglichkeit. Per Index ist es um ca 1.5 langsamer, mit Feldnamen ca. 10x.

Zitat von Elvis:
Als Anhänger von OO-Abbildung von DBs finde ich das Argument "Lesbarkeit" in Kombination mit DataSets mehr als fehl am Platz.
Was hat denn OO mit einer Tabelle zu tun? Wer hier feine Objektserialisierung implementiert, hat ein Rad ab.
Zitat von Elvis:
[1]das alles nur um den SQL Text in irgendeinem Form/Frame/DM-Designer tippen zu können
Nein. Und das Alles nur, um Programme zu schreiben, die schnell, robust und wartbar sind. Das gelingt Dir mit OO in Zusammenarbeit mit der Visualisierung von Tabellen nämlich nicht (also robust und wartbar: Ja, schnell: Nein).

Und nur weil ich eine Sprache habe, die es mir erlaubt, OOP zu betreiben, muss ich das ja nicht immer und überall anwenden.
Merke: Verwende immer die Technik, die für die Aufgabe am Besten geeignet ist.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Karstadt

Registriert seit: 8. Nov 2005
788 Beiträge
 
#9

Re: 100 x Fieldvalue durch Fieldbyname erstetzen?

  Alt 22. Mär 2006, 13:29
Dann muss ich aber ein Procedur Programmieren:

Delphi-Quellcode:

Procedure SchreibeDaten(Tabelle, Feld, Feldinhalt)
var i: integer
    t: string;
begin

for i := 0 to (Tabelle.fieldcount -1) do begin
  t := Tabelle.fields[i].fieldname;
  If t:= Feld then
  begin
    Tabelle.fieldbyname(t).asVariant := Feldinhalt;
    break;
  end;
end;
So ungefähr sollte das aussehen. ist aber etwas aufwendig.
  Mit Zitat antworten Zitat
Karstadt

Registriert seit: 8. Nov 2005
788 Beiträge
 
#10

Re: 100 x Fieldvalue durch Fieldbyname erstetzen?

  Alt 22. Mär 2006, 13:34
Zitat:
Persistente Felder sind die schnellste Zugriffsmöglichkeit. Per Index ist es um ca 1.5 langsamer, mit Feldnamen ca. 10x.
Wie kommst du auf diese Ergebnisse?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 14:44 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