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

    [Delphi] Copiare Record da un DB a un altro DB

    Ciao...

    io uso Borland C++ Builder che ha + o - gli stessi componenti di Borland Delphi e la sintassi di utilizzo e pressapoco uguale.

    Visto che Borland C++ Builder ti semplifica la programmazione ad oggetti lo uso molto pero non trovo molto su come usare i suoi componenti allora visto che delphi e più diffuso converto il pascal in c++.

    Volevo sapere come posso copiare un Record (cioe una intera righa) di un DataBase in un Altro DataBase utilizando i componenti ADOConnection , ADOTable (DataSet) DataSource.

    la mia situazione e questa, ho una connesione a un DB (A) con ADOConnectionA, ADOTableA e DataSourceA, e una connesione a un DB (B) con un altro ADOConnectionB ADOTableB e DataSourceB. Volevo copiare il Record corrente di ADOTableA del DB(A) nel DB(B), ho pensato che nell (A) devo tirar fuori il record (penso sia questa istruzione ADOTableA->Recorset) e devo mettrela nel DB(B) con Insert ma non trovo i comandi, anzi c'è ne uno ADOTableB->InsertRecord( TVarRec , int); ma che tipo e TVarRec? non e il recordset che inserisco..

    Come devo fare, c'e un altro modo?

    Garzie a Tutti....
    Il linguaggio migliore e quello che ti crei da solo...

  2. #2
    Utilizza un TADOQuery. Supponendo di avere il componente ADOQueryA sul DB A fai una select , esempio:

    SELECT NOMECOLONNA FROM TABELLAA

    Sul DB B fai una insert con il componente ADOQueryB, esempio:

    INSERT INTO TABELLAB(NOMECOLONNA) VALUES(:nomecolonna)

    ADOQueryB.ParamByName('nomecolonna').asString:=Ado QueryA.FieldByName('nomecolonna').AsString;

    Saluti

  3. #3
    Grazie..

    Ma cosi dovrei copiare tutti campi del database, non c'è un isctruzione per copiare tutta la righa con tutti i campi? :bubu:
    Il linguaggio migliore e quello che ti crei da solo...

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Originariamente inviato da Akira86
    Ma cosi dovrei copiare tutti campi del database, non c'è un isctruzione per copiare tutta la righa con tutti i campi? :bubu:
    Non vedo il problema: ti basta ottenere il numero di campi che hai nella tabella (la proprietà Fields dovrebbe avere una proprietà Count), scandisci ciascuna riga del DataSet (usando i metodi First e poi Next) e, per ognuna delle righe, esegui un ciclo che va da 0 al numero di campi decrementato di 1, assegnando al campo iesimo della tabella di destinazione il valore del campo iesimo della tabella sorgente (usa la proprietà Value del Field in esame all'interno del ciclo, è un Variant quindi non hai bisogno di verificare il tipo di dato); ovviamente, ad ogni Next sulla tabella sorgente che sposta il puntatore al record successivo da copiare, devi chiamare Append sulla tabella di destinazione per creare un nuovo record (vuoto) nel quale accomodare i valori.

    Sebbene non sia a conoscenza di un metodo per ottenere una copia "istantanea" dei valori, questa soluzione lavora egregiamente e globalmente per qualsiasi DataSet con cui hai a che fare, sia esso ADOTable, IBTable e così via...

    Originariamente inviato da Akira86
    io uso Borland C++ Builder che ha + o - gli stessi componenti di Borland Delphi e la sintassi di utilizzo e pressapoco uguale
    Mmmm...al massimo è l'IDE e i componenti ad essere uguali, ma la sintassi è diversa poichè Delphi usa il linguaggio Object Pascal, ribattezzato Delphi, mentre il secondo usa il linguaggio C++.

    Originariamente inviato da Akira86
    Visto che Borland C++ Builder ti semplifica la programmazione ad oggetti lo uso molto pero non trovo molto su come usare i suoi componenti allora visto che delphi e più diffuso converto il pascal in c++.
    Anche in Delphi puoi programmare ad oggetti; comunque è vero, essendo più diffuso, puoi trovare un maggior numero di esempi dedicati a Delphi, sebbene anche per C++Builder ci sia un bel po' di materiale sparso su Internet.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Mmmm...al massimo è l'IDE e i componenti ad essere uguali, ma la sintassi è diversa poichè Delphi usa il linguaggio Object Pascal, ribattezzato Delphi, mentre il secondo usa il linguaggio C++.
    Intendevo che "=" nel C++ in Delphi e ":=" , ecc.. Comunque io ho trovato sempre pocchissimi esempi su Borland C++ Builder, ci sono molti più esempi su Visual C++ di MS...

    ...assegnando al campo iesimo della tabella di destinazione il valore del campo iesimo della tabella sorgente...
    sarebbe cosi:

    ADOTable_Copia->FieldValues=ADOTable_originale->FieldValues;

    Non penso sarebbe troppo semplice, ho provato i vari metodi che la guida di borland mi dice, ma non riesco a conbinarli...

    E da poco che uso funzioni con DataBase, ma d'altronde se voglio imparare devo passarci del tempo su...

    Un altra cosa che tipo e il TVarRec? c'e nel metodo InsertRecord e anche nel metodo AppendRecord(TvarRec *, int);

    Grazie della spiegazione alka...
    Il linguaggio migliore e quello che ti crei da solo...

  6. #6
    Penso che Alka intendesse una cosa simile:

    var intCnt: integer;

    for intCnt:=0 to AdoTable_Originale.FieldCount -1 do
    AdoTable_Copia->Fields[intCnt].Value=AdoTable_Originale->Fields[intCnt].Value;

    InsertRecord e AppendRecord servono per l'inserimento di un record passando un array di valori, esempio:

    InsertRecord([Edit1.Text,Edit2.Text,NULL]);

    La sintassi è identica, ma il comportamento differente:

    1) InsertRecord: aggiunge il record alla posizione corrente
    2) AppendRecord: accoda il record alla tabella (il record viene inserito per ultimo)

    AppendRecord è più veloce.

    Saluti

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296

    Copia valori dei campi da tabella a tabella

    Originariamente inviato da Akira86
    Intendevo che "=" nel C++ in Delphi e ":=" , ecc..
    In questo caso, possiamo allora dire che i linguaggi si assomigliano tutti, visto che generalmente l'operatore "=" viene usato per le assegnazioni.
    Nel caso specifico di Delphi e C++, sono talmente diversi che non hanno in comune nemmeno l'operatore di assegnazione.

    Originariamente inviato da Akira86
    sarebbe cosi:
    ADOTable_Copia->FieldValues=ADOTable_originale->FieldValues;
    Ho capito cosa cercavi di ottenere, ma non credo sia possibile; ad ogni modo, ho elaborato una procedura "modello" (non verificata funzionalmente, ma compilata) che potrebbe aiutarti a comprendere:
    codice:
    procedure TMainForm.CopyButtonClick(Sender: TObject);
    var
      i: Integer;
    begin
      // Apre le tabelle
      SourceTable.Open;
      DestTable.Open;
      while not SourceTable.Eof do
      begin
        // Aggiunge un nuovo record
        DestTable.Append;
        // Copia i valori dei campi
        for i := 0 to SourceTable.FieldCount - 1 do
          DestTable.Fields[ i].Value := SourceTable.Fields[ i].Value;
        // Salva i valori
        DestTable.Post;
        // Si posiziona sul record successivo
        SourceTable.Next;
      end;
      // Chiude le tabelle
      SourceTable.Close;
      DestTable.Close;
    end;
    Originariamente inviato da Akira86
    Un altra cosa che tipo e il TVarRec? c'e nel metodo InsertRecord e anche nel metodo AppendRecord(TvarRec *, int);
    Il modo più semplice per conoscere qualcosa riguardo ad un tipo, una funzione, un metodo o altro ancora è posizionarsi sull'identificatore e premere F1.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  8. #8
    Grazie a Tutti e due, e perfetto..

    Però a conti fatti mi sembra che utilizzando AppendRecord mi semplifico di più dato che i dati da copiare c'è li ho in DBEdit.

    Pero c'è un problema uso un DataBase access e facendo AppendRecord passandogli i vari valori ma da errore nella prima colonna, il Campo ID, che non e modificabile.

    Come faccio a inserire i dati partendo dal secondo campo, saltando così il campo ID?

    Se si può se no uso il metodo con il ciclo e Fields Value..

    Grazie Mille...

    Ciao....
    Il linguaggio migliore e quello che ti crei da solo...

  9. #9
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Originariamente inviato da Akira86
    Però a conti fatti mi sembra che utilizzando AppendRecord mi semplifico di più dato che i dati da copiare c'è li ho in DBEdit.
    Scusa, ma sino ad ora ci hai fatto credere che i dati li dovevi copiare da una tabella ad un'altra...cosa c'entra il DBEdit?

    Originariamente inviato da Akira86
    Pero c'è un problema uso un DataBase access e facendo AppendRecord passandogli i vari valori ma da errore nella prima colonna, il Campo ID, che non e modificabile.

    Come faccio a inserire i dati partendo dal secondo campo, saltando così il campo ID?
    Semplice...non usi la AppendRecord.
    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  10. #10
    Scusa, ma sino ad ora ci hai fatto credere che i dati li dovevi copiare da una tabella ad un'altra...cosa c'entra il DBEdit?
    Ho detto che devo copiare i dati da un database (A) a un altro database (B). DBEdit sono gli edit con qui aquisisco i dati nel database (A) e con l'evento (Per ora di un bottone poi sara automatico) copio la righa del database (A) nel database (B)...

    i dati c'e li ho visibili all'utente...

    Semplice...non usi la AppendRecord.
    Sono soluzioni drastiche...

    Va ben dai faccio con il codice che hai postato tu...

    Ciao...
    Il linguaggio migliore e quello che ti crei da solo...

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.