AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken MySql / Zeos 6.6 / Delphi / PostError // Can not update a complex query with more tha
Thema durchsuchen
Ansicht
Themen-Optionen

MySql / Zeos 6.6 / Delphi / PostError // Can not update a complex query with more tha

Offene Frage von "EgonHugeist"
Ein Thema von bdg · begonnen am 5. Nov 2012 · letzter Beitrag vom 19. Nov 2012
Antwort Antwort
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

AW: MySql / Zeos 6.6 / Delphi / PostError // Can not update a complex query with more

  Alt 6. Nov 2012, 08:52
Dann lass doch die JOINs raus und erstelle dir LookupFelder, das sieht dann genauso aus und du kannst trotzdem updaten wie gewohnt.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
EgonHugeist

Registriert seit: 17. Sep 2011
187 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

AW: MySql / Zeos 6.6 / Delphi / PostError // Can not update a complex query with more

  Alt 7. Nov 2012, 01:14
Dann lass doch die JOINs raus und erstelle dir LookupFelder, das sieht dann genauso aus und du kannst trotzdem updaten wie gewohnt.
Wäre auch eine Möglichkeit. Jedoch sind die Lookups je nach Datenmenge eeeettttwwaasss lllaaannngsam.

Oder hab ich da was falsch verstanden mit der TZSqlUpdate-Komponente ???
Jap hatte jedoch den falschen Namen: TZUpdateSQL heist die Komponente und diese sollte auch schon mit 6.6.x verfügbar gewesen sein.

Die gab es in der Zeos5.3 nicht.
So wie ich weiss, setzt die einfach nur Sqls ab .
Keine Ahnung was es unter 5.3 gab oder nicht...
Jedoch Setzt die Komponente keine "eigenen" Sql's ab. Dort kannst du, wenn verlinkt mit TZQuery, die Parameter und deren Typ definieren. Du könntest die Datenbank quasi mit TZConnection.UseMetadata = False öffnen (ohne Meta-> rasend schnell) jedoch kann Zeos dann nicht wissen, welche Felder beschreibbar sind. Dafür gibt es diese Komponente.

"insert into Foo values(:Bar);" sollten den Parameter 'Bar' in der Kompo hervorrufen, welcher dann je nach Typ die Daten intern zusammenbastelt. Und so wie ich das sehe, unterstützt MySQL 3.x keine Prepared-Statements. Von daher verstehe ich deinen Einwand gerade nicht. Bin mir relativ sicher, das alles mit Strings gesendet wird.

Teste as einfach mal. Kann die jedoch nicht sagen, ob das alles mit dieser UraltDB+Zeos7 hinhaut.
  Mit Zitat antworten Zitat
bdg

Registriert seit: 19. Mär 2007
7 Beiträge
 
#3

AW: MySql / Zeos 6.6 / Delphi / PostError // Can not update a complex query with more

  Alt 9. Nov 2012, 10:11
Also :
Zu : "UraltDB" ecc ecc
ja richtig, das ist ja meine Aufgabe, das ganze auf einen neueren Stand zu bringen. Das dies eine Uraltdb ist weiss ich auch

Zeos 7 kann ich leider nicht verwenden, da die für Delphi NUR AB VERSION 7 gehen und das Programm in Delphi 5 geschrieben ist.

ZUpdate habe ich nachgeschaut, gibt es auch in Zeos5.3, habe ich aber noch nie gebraucht
SqlStatements in die ZSqlUpdate-Componente zu hinterlegen und diese dann mit den Querys zu verbinden
ist aufwendiger als überall "Query.Edit" mit Sql-Anweisungen zu ersetzten.
Ferner ist es für Fehlersuche ecc besser wenn eine Sql-Anweisung in der PAS drin steht als in der komponente(dfm)

Ich werde es dann wohl so machen

Um nochmal auf das Problem zu kommen :
http://www.lazarusforum.de/viewtopic...=6132&start=15

Dort ist der Code der das ganze blockt notiert

{**
Defines a table name from the select statement.
}
function TZGenericCachedResolver.DefineTableName: string;
var
I: Integer;
Temp: string;
begin
Result := '';
for I := 1 to Metadata.GetColumnCount do
begin
Temp := ComposeFullTableName(Metadata.GetCatalogName(I),
Metadata.GetSchemaName(I), Metadata.GetTableName(I));
if (Result = '') and (Temp <> '') then
Result := Temp
else if (Result <> '') and (Temp <> '') and (Temp <> Result) then
raise EZSQLException.Create(SCanNotUpdateComplexQuery);
end;
if Result = '' then
raise EZSQLException.Create(SCanNotUpdateThisQueryType);
end;

was passiert hier ?!?!?!?

Hier mein Besipiel-SQL

Query.Sql.Text := 'Select ' +
' firma.FirmenNr, firma.Name1, Firma.Name2, ' +
' Ansprechpartner.Vorname,Ansprechpartner.Nachname ' +
' from firma ' +
' left join Ansprechpartner on firma.FirmenNr=Ansprechpartner.FirmenNr '

Es wird jedes Feld mit den Tabellennamen versehen ( bei mir ist er schon drin ).
Beim durchlaufen der Felder , ' firma.FirmenNr, firma.Name1, Firma.Name2, ' passiert noch nichts
erst dann wenn " Ansprechpartner.Vorname" kommt merkt er das ist ein 2.Tabellenname
und nun brech ich ab mit "Can not update a complex query with more than 1 table"


Eine Lösung gibt es wohl nicht,
man könnte versuchen, an dieser Stelle die Function so umzuschreiben, das die schleife nicht durchläuft, aber eine bestehende komponente zu überarbeiten, ohne zu wissen, was denn an anderen stellen noch passieren kann ist nicht ratsam (((

Deswegen :
Ich stell mal alle Query.Edits/Append/Insert/Delete um auf Sql-Anweisungen
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#4

AW: MySql / Zeos 6.6 / Delphi / PostError // Can not update a complex query with more

  Alt 9. Nov 2012, 10:54
Mit Delphi 5 auf einen neuen Stand bringen?
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
bdg

Registriert seit: 19. Mär 2007
7 Beiträge
 
#5

AW: MySql / Zeos 6.6 / Delphi / PostError // Can not update a complex query with more

  Alt 9. Nov 2012, 12:08
Hallo,
ja
1.) delphi5 Mysql3 Zeos5.3 auf Delphi5 / Mysql3 / Zeos6.6
2.) delphi5 Mysql3 Zeos6.6 auf Delphi5 / Mysql5 / Zeos6.6
3.) delphi5 Mysql5 Zeos6.6 auf DelphiXE / Mysql5 / Zeos6.6 oder sogar 7

Oder wie würdest du ca. 1,5 Mio Zeilen Sourcecode umstellen ???
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#6

AW: MySql / Zeos 6.6 / Delphi / PostError // Can not update a complex query with more

  Alt 9. Nov 2012, 13:55
Genau so wie 1500 Zeilen Code: Auf Delphi nicht unter 2009, aktuellstes Zeos (oder besser gleich UniDAC), und die aktuelle MySQL. Wenn die Codebasis nicht völlig ungeschickt (ums nett zu sagen) gebaut ist, sollte die Menge an Stellen an denen man drehen muss ziemlich gering ausfallen. Für das Gros an Arbeiten vielleicht 2, maximal 3 Manntage, dann noch gründlich durchtesten und Kleinigkeiten bereinigen - in einer Woche (gerechnet in reiner Arbeit am Code) hast du das Ding spätestens entstaubt und bist zumindest wieder ein wenig zukunftsfähig.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)

Geändert von Medium ( 9. Nov 2012 um 13:58 Uhr)
  Mit Zitat antworten Zitat
bdg

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

AW: MySql / Zeos 6.6 / Delphi / PostError // Can not update a complex query with more

  Alt 9. Nov 2012, 14:49
Hallo,
ne ne das geht nicht so einfach wie du dir das vorstellst. letzenendes hab ich noch ein paar hundert Kunden, bei denen das installiert ist und mal auf die schnelle eine DB umstellen geht nicht so einfach
ABER :
Unidac scheint ein guter Tip zu sein .
Hab mal ein bisschen nachgeschaut.
Mal davon abgesehen, dass UniDAC ab Delph5 geht und ab MySql3 geht, scheint mir das neuer und kompatibler zu sein als Zeos, da so wie ich weiss Zeos 7 ja auch schon seit langem nicht mehr gepflegt wird !
d.h. auf mich zugeschnitten :
Delphi5 / MySql3 / Zeos53 auf Delphi5/MySql3/UniDac scheint mir sinnvoller zu sein, da UniDac auch noch
mit DelphiXE funktioniert!
Danach kann ich dann mit den gleichen Komponenten auf MySql5 umstellen und danach alles nehmen und mit DelphiXE compilieren ( einfach gesagt )

Kann mir jemand etwas mehr Info geben bzg. UniDac ???
So wie ich verstanden habe ( gesehen habe) arbeitet es genaus so wie Zeos. es verlangt nach einer LibMySql.dll

Weiss zufällig jemand ob auch eine LibMySql5.dll geht ???

Es ist so, mein Projekt hat mehrere EXE-Dateien.
Zeos5.3 greift auf einer LIBMYSQL.DLL zu ( das geht nicht anders) .
Zeos6.6 kann auf mehrere LibMysqlxx.DLL zugreifen ( libmysql.dll, libmysql40.dll, libmysql50.dll libmysql51.dll)
Ich habe eine LIBMYSQL.DLL von der MySql5.5 genommen und in libmysql51.dll umbenannt.
ALLE MEINE EXE-Dateien liegen in einem Ordner. inkl. libmysql.dll ( für Zeos5.3-Exe) und libmysql51.dll für Zeos66-Exe)


Denn ob ich nun Zeos5.3 komponenten austausche durch Zeos6.6-komponenten oder UniDac-Komponenten, die Arbeit ist die gleiche !!!

Und zu aller Letzt noch ein Wort : Danke für all eure bisherigen Antworten und Tips

Geändert von bdg ( 9. Nov 2012 um 14:51 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 19:03 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