PDA

View Full Version : dannato _Recordset...


Argosoft
28-11-2004, 22:21
ciau!
ho cominciato a fare qualche prova per imparare ad utilizzare Access attraverso i miei programmi... ma vi pareva che ad un certo punto non si impuntava tutto? :) eh! :muro:
Dopo qualche giorno passato a sbattere la testa con il C++ (con cui non ho cavato un ragno dal buco) ho pensato che forse sarebbe stato meglio provarci prima con Delphi... ah, il mio vecchio amore, tutto è filato liscio e funziona:

var r: _Recordset;
i: Integer;
begin
lbRis.Clear;
r := Connessione.Execute('SELECT * FROM Tabella ORDER BY nome ASC');
r.MoveFirst;
for i:=1 to r.RecordCount do
begin
lbRis.Items.Add(r.Fields['nome'].Value); {lbRis è una listbox}
r.MoveNext;
end;
end;

...è bastato inserire un componente TAdoConnection e farlo funzionare. A questo punto ho deciso di portare il tutto in C++ (usando BCB6) :

_Recordset r;
lbRis->Clear();
r = Connessione->Execute("SELECT * FROM Tabella ORDER BY nome ASC");
r.MoveFirst();
for(int i=0; i< r.RecordCount; i++){
lbRis->Items->Add(r.Fields["nome"].Value);
r.MoveNext();
}

e qui... CRASH!
1) Utilizzando il tipo _Recordset, alla dichiarazione mi dà il seguente errore:

[C++ Error] Unit1.cpp(37): E2352 Cannot create instance of abstract class '_Recordset'
[C++ Error] Unit1.cpp(37): E2353 Class '_Recordset' is abstract because of '__stdcall _Recordset::Seek(const OleVariant,unsigned int) = 0'

:confused:
Allora ho fatto una ricerchina ed ho scoperto che in genere per queste operazioni si usano i tipi _di_Recordset20, _di__Recordset e simili; ci ho provato, ma mi dà un errore sulla riga

lbRis->Items->Add(r.Fields["nome"].Value);

[C++ Error] Unit1.cpp(34): E2094 'operator+' not implemented in type '_di_Fields' for arguments of type 'char *'

ma che cacchio c'è che non va? :cry: help! :cry:



PS: avrei una domandina da fare.. metti che uso un db in un programma gestionale (quindi ci vengono fatte molte operazioni a poca distanza di tempo una dall'altra), è "accettabile" che la connessione rimanga aperta per tutta la durata del programma? Oppure la apro e la chiudo ad ogni operazione?


thanks!!!!