Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [C++Builder6]Problemi Stringa

    Ciao a tutti...ecco il problema:
    codice:
    for(int i = 0; i < DataModule2->Entrate->Fields->Count; i++)
      {
        srt=DataModule2->Entrate->Fields->Field[i]+",";
        strValue=DataModule2->Entrate->Fields->Field[i]->Value+",";
      }
    Alla fine del ciclo le due stringhe hanno una virgola in più...
    Come la tolgo???Non mi prendete in giro ma non ci riesco.
    Ciao e grazie, Manuel.

    PS:Le stringhe mi servono per una INSERT INTO di una command text.

  2. #2
    Come sono dichiarati strt e strValue?
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    str e strValue sono dichiarati di tipo String.
    Esiste una funzione che toglie solo l'ultimo carattere? (che ovviamente è la virgola...)

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Sarebbe sufficiente aggiungere un costrutto if nel ciclo che impedisca l'inserimento del carattere "," quando il contatore coincide con il valore "limite" del ciclo di iterazione stesso.

    Questa è la strada più semplice, ma non è così corretta come quella di utilizzare una query parametrica, che senz'altro C++Builder consente (i componenti sono quelli della VCL, la libreria con cui si sviluppano applicazioni in Delphi).

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

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

  5. #5

    ...

    Ciao Alka...
    Purtroppo non conosco ancora molto bene il builder e quindi mi dovrei documentare un pò sulle query parametriche!!!
    Cmq:
    Siccome so che l'ultimo carattere è una virgola, non potrei usare SubStr()???
    Se si, come caspita la uso...fino ad ora non ci sono riuscito, magari sbaglio la sintassi!!!
    ciao

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Ma perché mi chiedi come poter usare una soluzione diversa da quella che ti ho suggerito?

    Già che devi acquisire dimestichezza, usa gli strumenti nel modo corretto.

    Quale serie di componenti utilizzi per accedere alla base dati?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  7. #7
    In questo caso ho usato un ADOCommand...
    Cmq scusa, non è per scartare le tue soluzioni...il problema è che qua accanto a me c'è il mio supervisore che alle 19.00 mi controlla il lavoro...mi sembrava che con SubString la soluzione fosse meno efficente, ma per me più veloce perchè a corto di conoscenze. non ti arrabbiare please...

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Originariamente inviato da manu.aretuseo
    In questo caso ho usato un ADOCommand...
    Cmq scusa, non è per scartare le tue soluzioni...il problema è che qua accanto a me c'è il mio supervisore che alle 19.00 mi controlla il lavoro...mi sembrava che con SubString la soluzione fosse meno efficente, ma per me più veloce perchè a corto di conoscenze. non ti arrabbiare please...
    Già che sei controllato, meglio fare una bella figura, no?

    Quando esegui delle query, puoi inserire parametri all'interno della query che andrai a valorizzare successivamente.

    Ad esempio, nella proprietà CommandText puoi inserire uno statement SQL simile al seguente:
    codice:
    INSERT INTO TableName (FieldName)
    VALUES (:ParamName)
    Il valore preceduto dai due punti ( : ) è un parametro, e può essere valorizzato prima di eseguire il comando, cioè prima di invocare il metodo Execute del componente.

    codice:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      ADOCommand1.Parameters.ParamByName('ParamName').Value := 'SampleValue';
      ADOCommand1.Execute();
    end;
    (perdona lo script in Delphi, ma è per rendere l'idea

    Ci sono molti vantaggi in questo approccio:
    • puoi scrivere la query in fase di progettazione (designtime), senza concatenare comandi e valori a runtime, rompendoti la testa;
    • il parametro può essere anch'esso valorizzato a designtime per questioni di test, ad esempio per controllare che una query restituisca i valori appropriati;
    • alcuni driver sono in grado di "precompilare" le query e fare in modo che le successive chiamate siano più rapide; usando i parametri, si informa il motore ADO che verrà modificato solo il valore delle variabili dello statement e non la sostanza, quindi è possibile ricadere in questa casistica;
    • assegnando i valori dei parametri senza doverli convertire in stringa, gestire i formati internazionali e così via, si aumenta la sicurezza dell'applicazione e i "dolori di pancia".


    Prova e poi mi dirai...
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  9. #9

    Grazie Alka

    Scusa se non ti ho risposto prima, ma martedi il mio tempo era scaduto...cmq devo sistemare il problema stamattina!!!
    Ho letto il post proprio adesso, mi metto subito al lavoro e ti faccio sapere.
    Grazie per avermi dedicato il tuo tempo.

  10. #10
    Comunque, per rispondere alla domanda iniziale, ti basta usare il metodo resize:
    codice:
    str.resize(str.size-1);
    .
    Amaro C++, il gusto pieno dell'undefined behavior.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.