[Kylix3] Database connectie maken.

Pagina: 1
Acties:

  • active2
  • Registratie: Juni 2001
  • Laatst online: 17-07 21:56

active2

Google is your friend

Topicstarter
Een database connectie maken met kylix is dacht ik niet zo'n groot probleem maar ik loop telkens tegen de volgende foutmelding aan:
Operation not allowed on a unidirectional dataset
Wat ik daar nu aan moet doen dat weet ik niet. Ik snap niet wat er nou precies fout gaat.

De database connectie zelf wordt namelijk wel goed gemaakt. Verder voer ik alleen maar de volgende query uit: SELECT * FROM cd; Nou dat zou toch goed moeten zijn

Wie kan mij een handje helpen ?

Google, Het mirakel van de 21e eeuw!!!!


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

dbExpress geeft een unidirectional en readonly cursor terug. Je kan alleen lezen en Next en Last doen. Geen Locate, First, Next enz. Dat maakt de dbExpres drivers sneller en simpler.

Als je toch wilt schrijven en willekeurig van record veranderen in de dataset moet je het via TSQLDataSet plus TDataSetProvider doen of het component TSQLClientDataSet die de beide vorige samenvoegd.

We adore chaos because we like to restore order - M.C. Escher


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Lees ook in http://bdn.borland.com/ar...ications_to_dbexpress.pdf alles over te migreren van de BDE naar dbExpress.

We adore chaos because we like to restore order - M.C. Escher


  • whoami
  • Registratie: December 2000
  • Laatst online: 09:56
LordLarry schreef op 05 December 2002 @ 21:11:
dbExpress geeft een unidirectional en readonly cursor terug. Je kan alleen lezen en Next en Last doen. Geen Locate, First, Next enz. Dat maakt de dbExpres drivers sneller en simpler.

Als je toch wilt schrijven en willekeurig van record veranderen in de dataset moet je het via TSQLDataSet plus TDataSetProvider doen of het component TSQLClientDataSet die de beide vorige samenvoegd.



Ik heb nog niet met dbExpress gewerkt, maar zo te horen werkt dat dus een beetje op een ongeveer zelfde manier als ADO.NET in .NET:

DataReaders die read-only, fast-forward access leveren naar de data. Enkel Read(), geen find, geen Prior, ...
En een DataSet waarmee je een off-line 'container' krijgt van de data.

https://fgheysels.github.io/


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 27-08 22:41

Creepy

Tactical Espionage Splatterer

LordLarry schreef op 05 december 2002 @ 21:11:
dbExpress geeft een unidirectional en readonly cursor terug. Je kan alleen lezen en Next en Last doen. Geen Locate, First, Next enz. Dat maakt de dbExpres drivers sneller en simpler.
Laten we het er maar op houden dat next wel werkt ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Just_a_Gamer
  • Registratie: November 2001
  • Laatst online: 26-08 23:15
Volgens mij First ook :)

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Nee, First juist niet. Dat zou beteken dat je backwards zou moeten gaan. Dat kan niet bij een forward cursor.

En dat is niet wat Creepy bedoelde. Ik zei eerst dat Next wel werkte en daarna niet. Het correcte antwoord is idd dat Next wel werkt.

We adore chaos because we like to restore order - M.C. Escher


  • Just_a_Gamer
  • Registratie: November 2001
  • Laatst online: 26-08 23:15
euhmm heb ik nou verkeerd begrepen?

een Qoute van de help file TSQLQuery:
TSQLQuery is a unidirectional dataset. Unlike other datasets, unidirectional datasets do not buffer multiple records in memory. Because of this, you can only navigate using the First and Next methods.

[ Voor 3% gewijzigd door Just_a_Gamer op 06-12-2002 11:26 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 09:56
Vreemd.... Die First method zou dan willen zeggen dat de dataset niet meer 'unidirectional' is zoals LordLarry al aangaf. Stel, je staat op het 3de record, en dan roep je 'First' aan, dan ga je terug, terwijl hij enkel forward zou mogen kunnen gaan.

https://fgheysels.github.io/


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Inderdaad, je hebt gelijk. Het staat zo in de help. Ik kan het hier helaas niet uittesten, maar als ik er over nadenk blijf ik erbij dat First zou betekenen dat je backwards gaat. Behalve als je al op de eerste staat natuurlijk. Maar dat zou maar in een klein deel van de gevallen zo zijn. Ik kan het natuurlijk ook mis hebben, dus test het eerst uit voordat je ons gelooft :)

We adore chaos because we like to restore order - M.C. Escher


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 27-08 22:41

Creepy

Tactical Espionage Splatterer

Uit de TDataset.first source
Delphi:
1
2
3
4
5
6
7
8
9
  if IsUniDirectional then
  begin
    if not BOF then
    begin             // Need to Close and Reopen dataset: (Midas)
       Active := False;
       Active := True;
    end;
    FReopened := True
  end else

Dus de dataset wordt gewoon gesloten, en daarna opnieuw geopend om het huidige record naar het eerste record te laten wijzen. Vandaar dat .first wel werkt. Dus feitelijk ga je NIET backwards ;)

[ Voor 5% gewijzigd door Creepy op 06-12-2002 11:45 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Inderdaad. Dan heb je toch gelijk Just_a_Gamer :)

PS: Bedankt voor het opzoeken Creepy

Note to self: Nooit meer First aanroepen na openen tabel. Onnodig en vertragend.

[ Voor 33% gewijzigd door LordLarry op 06-12-2002 11:51 ]

We adore chaos because we like to restore order - M.C. Escher


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 27-08 22:41

Creepy

Tactical Espionage Splatterer

LordLarry schreef op 06 December 2002 @ 11:50:
Inderdaad. Dan heb je toch gelijk Just_a_Gamer :)

PS: Bedankt voor het opzoeken Creepy

Note to self: Nooit meer First aanroepen na openen tabel. Onnodig en vertragend.
Graag gedaan ;) Ik wilde nou zelf ook wel eens weten hoe het zat.
En ALLEEN met een Uni directional dataset is het dus onnodig en vertragend.
Bij een bidirectional dataset worden alleen de buffers geflusht en InternalFirst aangeroepen (en voor de cache wat extra records opgehaald). InternalFirst is alleen een virtual function in TDataset en ik kan InternalFirst niet zo snel terugvinden?? (in vcl\db.pas en vcl\sqlexpr.pas)

Note: In Delphi6 opgezocht dus. Maar ik neem aan dat in Kylix van dezelfde source gebruik gemaakt word.

[ Voor 8% gewijzigd door Creepy op 06-12-2002 12:03 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1