Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ParamByName geht und geht mal nicht (https://www.delphipraxis.net/184859-parambyname-geht-und-geht-mal-nicht.html)

Neumann 28. Apr 2015 15:34

AW: ParamByName geht und geht mal nicht
 
Auch wenn man einige besonderen Regeln hat wie die mit der Kontonummer würde ich trotzdem mit der Schleife arbeiten. Die Sonderfälle kann man dann immer noch extra behandeln.

Die Zeile

if Query_Quelle.FieldByName('KONTONUMMER').AsInteger = Null

scheint wohl zu funktionieren, gefällt mir aber irgendwie nicht. Ich prüfe bei soetwas entweder auf isnull oder asinteger=0

Abfragen usw über mehrere Datenbanken sind mit Firebird möglich; z.B. in Executeblock-Statements.

himitsu 28. Apr 2015 15:58

AW: ParamByName geht und geht mal nicht
 
Zitat:

Zitat von Neumann (Beitrag 1299570)
scheint wohl zu funktionieren

Nein, tut es nicht, aber das hatte ich bereits genannt, inkl. Erklärung warum nicht.

Neumann 28. Apr 2015 17:30

AW: ParamByName geht und geht mal nicht
 
Es lässt sich kompilieren und ausführen, was ich eigentlich bezweifelt hatte. Ob es wirklich funktioniert, habe ich auf die Schnelle nicht geprüft.

Ich habe IBO noch nie eingesetzt; verwende eigentlich immer IBDAC und früher die IB-Komonententen. Bei beiden kann man die Insert und Update - Statments automatisch generieren lassen, geht das bei IBO nicht? Sieht mühsam aus, das alles selber zu schreiben.

himitsu 28. Apr 2015 17:36

AW: ParamByName geht und geht mal nicht
 
Wie gesagt, was dort passiert, hatte ich hier auch beschrieben. Kompilieren lässt es sich, aber es macht nicht das, was es soll.

Zitat:

Sieht mühsam aus, das alles selber zu schreiben.
Wurde auch schon vorgeschlagen.
z.B.
SQL-Code:
SELECT * FROM table LIMIT 0
(limit 0, da vorhandene Datensätze hier ja egal sind) und dann mit DataSet.Insert/Post, sowie die Felder per Schleife übertragen.

jobo 28. Apr 2015 20:28

AW: ParamByName geht und geht mal nicht
 
Zitat:

Zitat von p80286 (Beitrag 1299567)
da Quelle und Ziel den gleichen Tabellennamen haben, scheint es sich um eine "Datenbankkopie" zu handeln

Ja, klingt einleuchtend, habe ich überlesen.
Dann halt mit Stored Procedure, Execute Statement .. on external datasource.. .

Das wäre nativ, schnell, typsicher und flexibel. (Und etwas weniger Schreibkram)
Außer ein Experte hier weiß, dass es mit alten Versionen nicht geht oder remote DB.

Walter Landwehr 29. Apr 2015 13:02

AW: ParamByName geht und geht mal nicht
 
Hallo Sir Rufo,

was sind
for LFieldName in LFieldNames do
für Variablen.

himitsu 29. Apr 2015 13:15

AW: ParamByName geht und geht mal nicht
 
Das war ein Beispiel-Code.

LFieldName ist natürlich ein lokaler String. (Schleifenvariable)
LFieldNames ist z.B. ein Array oder eine StringListe mit den FeldNamen, der zu kopierenden Felder. (man könnte auch direkt über DataSet.Fields gehn)



Und wenn es schneller sein soll, dann holft man sich vor der Schleife (über alle DataRecords) die Instanzen aller nötigen TField, anstatt immer wieder neu per FieldByName suchen zu lassen.

mkinzler 29. Apr 2015 13:17

AW: ParamByName geht und geht mal nicht
 
Das ist eine Enumeration.

Ich vermute das LFieldNames eine StringListe ist, dann müsste LFieldName ein String sein.

Sir Rufo 29. Apr 2015 13:24

AW: ParamByName geht und geht mal nicht
 
Da
Delphi-Quellcode:
ParamByName
und
Delphi-Quellcode:
FieldByName
einen
Delphi-Quellcode:
string
erwarten, muss
Delphi-Quellcode:
LFieldName
irgendein Typ sein, der automatisch in einen
Delphi-Quellcode:
string
gecastet werden kann. Straight forward wäre da der Typ
Delphi-Quellcode:
string
.

Delphi-Quellcode:
LFieldNames
muss ein Typ sein, der einen Enumerator bereitstellt, der zum Typ von
Delphi-Quellcode:
LFieldName
passt. Straight forward wäre hier
Delphi-Quellcode:
TArray<string>
oder
Delphi-Quellcode:
TStringList
oder ...

mkinzler 29. Apr 2015 13:37

AW: ParamByName geht und geht mal nicht
 
Ich weiß nicht, ob es in XE2 schon geht

Delphi-Quellcode:
var ...
  fieldname: string; ...

  for fieldname in Query_Quelle.GetFieldNames do


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:22 Uhr.
Seite 3 von 3     123   

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