[DELPHI] Cursor not returned from Query

0

Witam

Wykonuję operacje SQL-owe komponentem SQLDataSet (wiem że istnieją inne wyrafinowane metody ale ja chce skorzystać właśnie z tej) :-|

if Form1.SQLDataSet1.Active then Form1.SQLDataSet1.close;   // jeśli SQLDataSet1 wlaczony to wylacz         // uaktualnianie DBGrida
if Form1.ClientDataSet1.Active then Form1.ClientDataSet1.Close; // jeśli ClientDataSet1 wlaczony to wylacz
Form1.SQLDataSet1.CommandText:='';                  //  wyczyść pole z zapytaniem SQL;
Form1.SQLDataSet1.CommandText:=(Memo1.Text); // wczytanie polecnia
Form1.SQLDataSet1.Open;
Form1.SQLDataSet1.Active := true;       // włącz SQLDataSet1
Form1.ClientDataSet1.Active := true;   // włącz ClientDataSet1

Niestety po wykonaniu tych procedur otrzymuje błąd

"SQLDataSet1 Cursor not returned from Query"

Co dziwne przy sortowaniu nie wyrzuca błędu tylko dopiero przy dodaniu np rekordów lub tabeli ale najdziwniejsze jest to, że pomimo błędu tabela lub rekord powstaje.

Nie wiem o co chodzi bo jestem początkujący :-|

0

Sproboj napisac to przy pomocy ADOCommand , moze nie bedzie konflikt wyskakiwal , albo cos z tym memo masz nie tak :p

0

Nic to mi nie daje a z Memo jest wszystko ok bo sortowanie poleceniami SQL-dział bez zarzutu

tylko błąd wyskakuje kiedy chcę wprowadzać zmiany w tabeli

0

Czy używasz TProvider między DataSet i ClientDataSet? Podaj też treść zapytania SQL.

0

Zrobiłem następujące połączenie

SQLConnection1 -> DataSetProvider -> ClientDataSet -> DataSource -> DBGird

Używałem kilku zapytań SQL oto dwa

dodanie tabeli

create table ADRESY
(
Nazwisko varchar(40),
Adres varchar(50),
Telefon varchar(20)
)

Dodanie rekordu

insert into ADRESY
(Nazwisko, Adres, Telefon)
values
('Piwowarczyk, Maciek','Warszawa','999999999')

Nie mam wątpliwości że są poprawne bo jak napisałem wcześniej są wykonywane

0

OPEN stosuje się tylko do zapytań typu SELECT. Dlatego dostajesz błąd, bo zapytanie nie zwraca danych (w postaci zwanej "kursorem").

0

Pomimo skasowania open przy tworzeniu nadal wyskakuje błąd :|

A ewentualnie co zrobić żeby mi nie zwracało "kursora" ?

0

A po co ci kursor jeśli nie przeglądasz danych? Pamiętaj że active:=true = open, więc to też trzeba skasować. Do zapytań sql nie zwracających danych stosuje się execute zamiast open.

0

Serdecznie dziękuję, korzystając z okazji chciałbym zapytać jeszcze jak pobrać nazwy kolumn z DBGrida za pomocą którego przeglądam bazę chce je później umieścić w Comboboxie

Nazwy tabel znajdujących się w bazie pobieram za pomocą

 Connection.GetTableNames(ComboBox1.Items,false); // wyswietl nazwy tabel w ComboBoxie

Ale nie wiem jak pobierać nazwy kolumn

0

TDataSet.GetFieldNames

1 użytkowników online, w tym zalogowanych: 0, gości: 1