|
||||
|
|
#1 (permalink) |
|
Nuovo della community ![]()
5 Messaggi
![]() |
Salvataggio dati su Database
inizio subito con la prima domanda
premetto che ho creato un mio database partendo da un inport di un file txt in un mdb a questo dbase apporto con un ciclo di controllo delle modifiche e poi nel momento in cui tenti di ssalvarlo per poi richiamarlo nuovamente per crearmi un report mi ritornano a video i dati di partenza... per il salvataggio uso: begin form1.ADOTable1.Connection:=nil; form1.ADOConnection1.Connected:=False; form1.ADOConnection1.Connected:=True; form1.ADOTable1.Connection:=form1.ADOConnection1; try form1.ADOTable1.UpdateBatch(arAll); finally form1.ADOTable1.Connection:=nil; form1.ADOConnection1.Connected:=False; end; non so se e' esatto ma il risultato e' quello sopra citato. saprebbe qualcuno aiutarmi? |
|
|
|
|
|
#2 (permalink) |
|
Very Important Person ![]() ![]()
626 Messaggi
![]() |
Non uso TADOTable, ma da quel poco che so quello che fai è
codice:
form1.ADOTable1.Connection:=nil; // Scollego il componente dal database form1.ADOConnection1.Connected:=False; // Scollego il database (?) form1.ADOConnection1.Connected:=True; // Ricollego il database (?) form1.ADOTable1.Connection:=form1.ADOConnection1; // Riconnetto il componente al database ![]() codice:
try form1.ADOTable1.UpdateBatch(arAll); // Aggiorni una tavola appena aperta. Cioé senza alcuna modifica (l'hai appena aperta!) finally form1.ADOTable1.Connection:=nil; // nuovamente disconnetti il componente dal database form1.ADOConnection1.Connected:=False; // nuovamente disconnetti il database end; Non conosco il metodo UpdateBatch, ma se tanto mi dà tanto, aggiorna il database applicando tutte le modifiche che hai apportato al dataset ADOTable1. Ora... un dataset appena aperto non può essere stato modificato da nessuno, quindi non ci sono modifiche da apportare. Se le modifiche ai dati di ADOTable1 le avevi fatte prima di questo codice che hai postato, probabilmente puoi sostituire tutto con qualcosa del tipo codice:
ADOConnection1.BeginTrans; // Inizio una transazione
try
ADOTable1.UpdateBatch(arAll); // Aggiorno il database con le modifiche apportate ai dati contenuti in ADOTable1
ADOConnection1.CommitTrans; // Tento di chiudere la transazione
except
ADOConnetcion1.RollbackTrans; // Errore, qualcosa non va nei dati, annullo la transazione
raise; // risollevo l'eccezione, da gestire da programma
end;
![]()
__________________
Vienimi a trovare: http://www.cyberlaundry.net RICORDA che il modo migliore per ringraziare chi ti dà supporto è di fare click sull'icona "commenta intervento" Se risolvi da solo il problema che hai postato, condividi con noi la soluzione. Potrebbe essere utile ad altri. |
|
|
|
|
|
#3 (permalink) |
|
Nuovo della community ![]()
5 Messaggi
![]() |
Cyber innansitutto grazie per la tua risposta
![]() ho provato anche come dici tu ma il problema non cambia cerco di spiegarmi meglio 1.parto da un database mdb riempito con dei dati 2.tramite una routine modifico all'occorrenza un determinato campo .- sino a qua tutto funziona benissimo il mio database visualizzato sul dbgrid mi visualizza i cambiamenti che voglio 3. a questo punto devo solo riprendere questo database che ho caricato in memoria e risalvarlo nel mio nomefile.mdb e' qua che non funziona e che una volta che lo faccio mi ripropone gli stessi record che avevo prima dell'elaborazione. ci sto perdendo il aiutooooooooooo |
|
|
|
|
|
#4 (permalink) |
|
Neofita della community ![]()
67 Messaggi
![]() |
Ciao
Prova ha dare la stringa di connessione dopo aver chiuso l'oggetto ADotable1 e prima di aprirlo; nel seguente modo:
form1.ADOTable1.Connection:=nil; form1.ADOConnection1.Connected:=False; form1.ADOTable1.Connection:=form1.ADOConnection1; form1.ADOConnection1.Connected:=True; Fammi sapere. |
|
|
|
|
|
#5 (permalink) |
|
Nuovo della community ![]()
5 Messaggi
![]() |
ciao nicolas grazie anche a te per l'aiuto
purtroppo anche cosi non raggiungo l'aggiornamento del mio mdb anzi mi genera un errore in quanto l'adotable e' chiusa e quindi non riesce ad aggiornare ma possibile che non ci siaa un comando che una volta aperto ed elaborato un mdb permetta di salvare gli aggiornamenti fatti nello stesso file? sono letterelamente ridotto cosi: ![]() |
|
|
|
|
|
#6 (permalink) |
|
Very Important Person ![]() ![]()
626 Messaggi
![]() |
Sicuramente c'é qualcosa che non sappiamo. Conviene che posti un esempio. Prepara un progettino campione con solo lo stretto necessario (mdb e il progetto Delphi con la form, la grid e il tuo codice) in modo intanto da "isolare" il tuo problema, poi di permetterci di vedere dov'é l'errore.
Ce lo alleghi nella prossima risposta? |
|
|
|
|
|
#7 (permalink) |
|
Nuovo della community ![]()
5 Messaggi
![]() |
progetto
lo posto immediatamente e grazie sempre a tutti per il vs interessamento
codice:
unit Pv100Read;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, Grids, DBGrids, ExtCtrls, DBCtrls,printers, StdCtrls,
QRPrntr, ComCtrls, jpeg;
type
TForm1 = class(TForm)
DBGrid1: TDBGrid;
DataSource1: TDataSource;
ADOTable1: TADOTable;
Button1: TButton;
Button2: TButton;
Button3: TButton;
ProgressBar1: TProgressBar;
Label1: TLabel;
Image1: TImage;
Label2: TLabel;
Label3: TLabel;
ADOConnection1: TADOConnection;
ADOTable1Kod: TIntegerField;
ADOTable1Descriptio: TWideStringField;
ADOTable1Qyt: TIntegerField;
ADOTable1Price: TIntegerField;
ADOTable1fpa: TIntegerField;
ADOTable1Data: TDateTimeField;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses RpPrint;
{$R *.dfm}
procedure ctrl_data;
var
i: integer;
db:Tadotable;
d1,d2:Tdate;
prova:string;
myYear,myyear2, myMonth,mymonth2, myDay:word;
data1,data2:string;
begin
i:=0;
form1.ProgressBar1.min:=0;
form1.ProgressBar1.Max:=form2.ADOTable1.RecordCount;
for I := 0 to form1.ADOTable1.RecordCount do
begin
form1.progressbar1.Position:=i;
form1.Refresh;
d1:=form1.ADOTable1Data.Value;
data1:=datetostr(d1);
data2:=datetostr(d2);
prova:=form1.ADOTable1Descriptio.Text;
if i=0 then
d2:=d1;
if abs(d1-d2)>200 then
begin
DecodeDate(d1, myYear, myMonth, myDay);
data1:=datetostr(d1);
data2:=datetostr(d2);
myyear:=myyear+1;
form1.ADOTable1Data.NewValue:=Encodedate(myYear,MyMonth,MyDay);
data1:=datetostr(form1.ADOTable1Data.NewValue);
d1:=form1.ADOTable1Data.NewValue;
d2:=d1;
end
else
d2:=d1;
form1.ADOTable1.Next;
form1.Label1.Caption:='Record N. '+inttostr(i)+' Of '+inttostr(form2.ADOTable1.RecordCount)+' '+ prova;
form1.Label1.Refresh;
end;
showmessage(inttostr(i));
begin
form1.ADOConnection1.BeginTrans; // Inizio una transazione
try
form1.ADOTable1.UpdateBatch(arAll); // Aggiorno il database con le modifiche apportate ai dati contenuti in ADOTable1
Form1.ADOConnection1.CommitTrans; // Tento di chiudere la transazione
except
on exception do
begin
showmessage('Processing Error');
form1.ADOConnection1.RollbackTrans;// Errore, qualcosa non va nei dati, annullo la transazione
end;
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
rpprint.Form2.QuickRep1.Preview;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
rpprint.Form2.QuickRep1.PrinterSettings;
rpprint.Form2.QuickRep1.Print;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
ctrl_data;
end;
end.
mentre il dbase e': |
|
|
|
|
|
#10 (permalink) |
|
Very Important Person ![]() ![]()
626 Messaggi
![]() |
Evita di fare Form1.refresh e usa una funzione tipo DaysBetween della Unit DateUtils.
Se vuoi aggiornare la progressbar a video, fai una Application.ProcessMessages Edit: comunque MOOOOLTO probabilmente quello che fai da codice spazzandoti un record alla volta, puoi farlo con una query di aggiornamento (vedi "UPDATE").
__________________
Vienimi a trovare: http://www.cyberlaundry.net RICORDA che il modo migliore per ringraziare chi ti dà supporto è di fare click sull'icona "commenta intervento" Se risolvi da solo il problema che hai postato, condividi con noi la soluzione. Potrebbe essere utile ad altri. |
|
|
|
![]() |
| Strumenti della discussione | |
| Modalità di visualizzazione | |
|
|
Tutti gli orari sono GMT +2. Attualmente sono le 09:50.












aiutooooooooooo



Modalità lineare

