Netzwerkzugriff auf eine SQL Datenbank

Alles rund um die Programmierung mit Qt
Sephral
Beiträge: 201
Registriert: 1. Februar 2006 09:40
Kontaktdaten:

Beitrag von Sephral »

QDataStream kann Dir alle möglichen Qt-Datentypen (darunter auch ganze Listen, Hashes usw. !!) in einen String umwandeln und wieder zurück.

Wenn du das Ergebnis einer Anfrage z.B. in eine QStringList packst, dann kannst du die Liste / Hash serialisieren und komplett an die Gegenstelle übertragen. Auf der anderen Seite kannst du (ohne nennenswerte Arbeit) den empfangenen String wieder in eine QStringList konvertieren lassen.

Ist ne schöne Sache und man kann fast ohne Aufwand nahezu beliebige Daten übertragen. In der Doku finden sich einige Beispiele.
Viper2000
Beiträge: 48
Registriert: 7. Mai 2008 16:36

Beitrag von Viper2000 »

Super, vielen Dank - werd mir mal die Beispiele in der Doku ansehen! Habe dann bestimmt noch ein paar Fragen :-) Hoffe das ist ok für euch. So langsam finde ich gefallen an Qt...
Ich bin nicht die Signatur, ich putz hier nur :-)
Sephral
Beiträge: 201
Registriert: 1. Februar 2006 09:40
Kontaktdaten:

Beitrag von Sephral »

Achja, für Deinen Fall vielleicht interessant:

Du kannst die Listen natürlich auch ineinander verschachteln...

z.B. QHash<QString, QStringList>

Damit kann man dann auch komplexere Strukturen übertragen.
Viper2000
Beiträge: 48
Registriert: 7. Mai 2008 16:36

Beitrag von Viper2000 »

Habe jetzt vieles zu XML und QStringList usw. gelesen!

Angenommen ich nutze eine XML Struktur um Daten aus der Datenbank zu übertragen! Dann könnte ich die Daten der Anfrage ja auf der Datenbankseite im XML Format in ein QTemporaryFile schreiben. Dann habe ich die Daten schonmal im Speicher drinnen.

Wäre nur noch die Frage wie man dann dieses QTemporaryFile serialisieren kann um es über den QTcpSocket zu jagen.
Ich bin nicht die Signatur, ich putz hier nur :-)
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Eine Datei braucht man nicht 'serialisieren'. Die Daten darin sind es ja schon... Ein QTemporaryFile und ein QTcpSocket sind beides QIODevice's. Somit dürfte ein Transfer überhaupt kein Problem mehr darstellen. Und eigentlich bräuchte es das QTemporaryFile auch nicht...
Sephral
Beiträge: 201
Registriert: 1. Februar 2006 09:40
Kontaktdaten:

Beitrag von Sephral »

@Viper2000
Ich glaube es wird Zeit dass du mal ein paar Testprojekte startest. Du hast hier im Thread viele gute Tips. Probier's einfach mal in nem kleinen Rahmen aus in mehreren Varianten und schau was dir am besten gefällt.
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

Er braucht noch nicht mal die Datei ....

Ein QDomDocument laesst sich ohne Probs in einen stream direct serialisieren ....

Auf der gegenstelle wiederum kann man ein QDomDocument wieder aus nem stream erzeugen .... man braucht also gar keine dateien, oder expliziete buffer, man kann das zeugs direckt ueber ne socketschnitstelle schicken ....

bool QDomDocument::setContent ( QIODevice * dev, bool namespaceProcessing, QString * errorMsg = 0, int * errorLine = 0, int * errorColumn = 0 )

QTextStream & operator<< ( QTextStream & str, const QDomNode & node )

Ciao ....
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Den Output von QDomDocument würde ich nicht mehr seriallisieren, dies erzeugt nur einen zusätzlichen Header-Overhead.
Viper2000
Beiträge: 48
Registriert: 7. Mai 2008 16:36

Beitrag von Viper2000 »

Ok, danke soweit! Ich werde übers Wochenende mal ein paar Varianten testen und mich bei Fragen nochmal an euch wenden. Danke soweit schonmal für die nette Hilfe.
Ich bin nicht die Signatur, ich putz hier nur :-)
Viper2000
Beiträge: 48
Registriert: 7. Mai 2008 16:36

Beitrag von Viper2000 »

Kurze Rückmeldung:

Es wurde jetzt in unserem Projekt so gelöst, dass alles an Datenbankinformationen in ein QDomDocument gepackt wird. Dieses QDomDocument wird dann in ein QByteArray gedrückt und das QByteArray wird noch komprimiert. Dadurch spart man nochmal einen beachtlichen Teil an Daten, die zu übertragen sind ein.
Ich bin nicht die Signatur, ich putz hier nur :-)
Antworten