Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [Delphi] generare file XML

    Ho un problema che mi angoscia: devo esportare dei dati da una tabella di un database in un file XML. Funziona tutto alla grande, tranne per il fatto che le informazioni vengono scritte sul file tutte su di un rigo.
    Non capisco come mai. Ecco l'evento del click del mio bottone.
    grazie a chiunque voglia aiutarmi
    raf

    procedure TForm1.BT_creaXMLClick(Sender: TObject);

    var
    str: TFileStream;
    s: string;

    i: Integer;
    begin

    str := TFileStream.Create ('ditte.xml', fmCreate);
    try
    SimpleDataSet2.First;
    s := '<?xml version="1.0" standalone="yes" ?><employee>' ;
    str.Write(s[1], Length (s));

    while not SimpleDataSet2.EOF do
    begin
    s := '';
    for i := 0 to SimpleDataSet2.FieldCount - 1 do
    s := s + MakeXmlstr (SimpleDataSet2.Fields[i].FieldName,
    SimpleDataSet2.Fields[i].AsString);

    s := MakeXmlStr ('employeeData', s);
    str.Write(s[1], length (s));

    SimpleDataSet2.Next
    end;
    s := '</employee>' ;
    str.Write(s[1], length (s));
    finally
    str.free;
    end;

    end;

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315
    ciao il problema potrebbe essere quello di scrivere a fine riga cr+lf....

    quindi prova cosi:

    codice:
    str.Write(s[1]+#13#10, length (s)+2);

    o qualcosa del genere. e' dai notizie dei risultati

    ciao

  3. #3
    andava bene era un problema legato alla formattazione XML
    il file funziona
    Il mio problema ora e' che devo portare i dati da un database ad un'altro di tipi diversi
    Sono 4 Tabelle legate tra di loro, come faccio a mantenere le relazioni.
    Per esempio nel mio database del gestionale dal quale estraggo i dati ho una tabella prodotti ed una tabella ditte dei prodotti che sono in relazione attraverso un campo codice ditta; nel trasportarli sul nuovo dabase, non esiste il campo codice ditta, ma le tabelle sono in relazione attraverso il campo ID di autoincrement. Come faccio a rispettare le relazioni, dovrei creare un campo codice ditta nel nuova Database e relazionarle attraverso quello?
    Funzionera'?
    grazie

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315
    non capisco bene quali relazioni intendi rispettare...

    prova a postare le tabelle di entrambi i database

  5. #5
    una database e' firebird e l'altro e' mysql. E' un casino postare le tabelle.
    Ma ti spiego nel primo database Firebird ho una tabella prodotti, che e' in relazione con una tabella ditte ok. Cioe' nella tabella prodotti c'e' un campo 'codice_ditta', che mi crea la relazione tra le tabelle, cioe' mi dice a che ditta appartiene il prodotto.
    Quando vado per importare su mysql c'e' sempre una tabella prodotti chiaramente ma all'interno la relazione con la ditta che si trova su di un'altra tabella, non me la crea attraverso un codice ditta separato, ma attraverso il campo ID_ditta che e' un campo indice primario di autoincrement. Quindi io non capisco come posso relazionarli. Dovrei aggiungere un campo nella tabella prodotti del secondo database, 'codice_ditta', che dovrebbe corrispondere al campo del primo database e cercare di fare le corrispondenze.
    Non so se sono stato abbastanza chiaro
    Raffaele

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315
    Originariamente inviato da nucarvignulu
    una database e' firebird e l'altro e' mysql. E' un casino postare le tabelle.
    Ma ti spiego nel primo database Firebird ho una tabella prodotti, che e' in relazione con una tabella ditte ok. Cioe' nella tabella prodotti c'e' un campo 'codice_ditta', che mi crea la relazione tra le tabelle, cioe' mi dice a che ditta appartiene il prodotto.
    Quando vado per importare su mysql c'e' sempre una tabella prodotti chiaramente ma all'interno la relazione con la ditta che si trova su di un'altra tabella, non me la crea attraverso un codice ditta separato, ma attraverso il campo ID_ditta che e' un campo indice primario di autoincrement. Quindi io non capisco come posso relazionarli. Dovrei aggiungere un campo nella tabella prodotti del secondo database, 'codice_ditta', che dovrebbe corrispondere al campo del primo database e cercare di fare le corrispondenze.
    Non so se sono stato abbastanza chiaro
    Raffaele
    certo che se ti e' difficile postare la struttura di 2 tabella sarà un'impresa riuscire a trovare la soluzione!

    vediamo se ho capito.
    tu hai due tabelle in firebird
    codice:
    TABLE PRODOTTI(
       ID                    INTEGER NOT NULL PRIMARY KEY,
       ........
       ........
       CODICE_DITTA   INTEGER REFERENCES DITTE(ID),
       ........
       ........
    
    
    TABLE DITTE(
       ID                    INTEGER NOT NULL PRIMARY KEY,
       ........
       ........

    tu hai due tabelle in MySql
    codice:
    TABLE PRODOTTI(
       ID                    INTEGER NOT NULL PRIMARY KEY,
       ........
       ........
       ID_DITTA         INTEGER REFERENCES DITTE(ID),
       ........
       ........
    
    
    TABLE DITTE(
       ID                    INTEGER NOT NULL PRIMARY KEY,
       ........
       ........

    correggi la struttura se l'ho sbagliata.....
    nel caso in cui, invece, ho scritto bene non vedo quale sia il problema.

    ciao

  7. #7
    Si la struttura e' questa
    il problema e' che nel primo database la tabella prodotti fa' riferimento ad un codice ditta diverso da ID di autoincrement.
    Nel secondo databese non esiste questo campo codice ditta, fa' solo riferimento all'ID di autoincrement.
    Ora io carico prima la tabella delle Ditte su MYSQl , creandogli anche un'altro campo codice ditta.
    Mi trovo quindi in questa situazione:
    Databes MYSQL dove devo portare i dati
    -------tabella_ditte----------
    --ID campo not nulla autoincrement ( non lo assegno io)
    ---Campo Descrizione Ditta------- (stringa)
    ---Campo codice ditta------

    -----tabella prodotti---------

    --ID campo not null autoincrement
    ----Descrizione----
    -----xxxxxxxxx----
    -----ID Campo ditta--- (questo usa il dabase mysql per far riferimento alla ditta)
    ------Campo codice ditta----(quello che dovrei usare io per metterle in relazione).
    cioe' il mio problema e' una volta aggiunti su entrambi le tabelle il nuovo campo 'codice_ditta',
    diverso dal campo ID di autoincrement, come faccio a far corrispondere in mysql la ditta al prodotto attraverso ID di autoicrement.
    Quando carico il prodotto nel dabase mysql devo dirgli in qualche modo che quel prodotto fa' rirerimento a quella ditta attraverso ID di autoincrement ma sfruttando la relazione che posseggo che sarebbe il codice della ditta.
    Non so se sono stato chiaro comunque se hai la possibilita' di collegare il database MYSQL ti mando le tabelle.
    grazie per la risposta

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315
    ciao, ti aiuterei volentieri, ma non ho nessun gestionale per database MySQL,...quale programma utilizzi?

    non conosco MySql, e quindi non so come gestisce i campi autoincrement

    devo pensare che questa cosa la vuoi risolvere con comandi SQL (con un programma sarebbe molto semplice)

    io credo che ti stai ponendo un problema già risolto....

    ....
    Questo perchè durante la creazione della tabella in esame, specificammo come attributo del campo AUTO_INCREMENT, MySQL quindi assegnerà automaticamente un valore progressivo a questo campo ad ogni inserimento.

    MySQL vi consente comunque di specificare un valore per questo campo, e se invece volete metterlo nella lista dei campi ma dire a MySQL di auto incrementarlo, allora nei VALUES specificate il valore speciale NULL per il campo `id_utente`.
    ....
    leggi qui
    http://www.realizzazione-sito.info/linguaggio/mysql


    fammi sapere
    ciao

  9. #9
    in che senso con un programma?
    io comunque per caricare i dati devo crearea una query, pero' prima di creare la query ,quando carico l'ultima tabella dei prodotti, devo recuperare prima il valore id dei fornitori per fornirgli quello giusto

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315
    a me era sembrato di capire che il valore in un autoincrement possa essere impostato manualmente e se invece quel campo e' null viene generato il valore autoincrementato. non e' cosi?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.