Toon posts:

[ADO/SQL] Delete kan niet op gesloten object *

Pagina: 1
Acties:
  • 342 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hallo mensen,
ik heb een grote bug in het systeem zitten.
Het gaat om het verwijderen van records.

Dim verwijder As String

verwijder = Adodc1.Recordset.Fields("sleutel").Value

Adodc1.RecordSource = "Delete from beta_absenties where sleutel like '" & verwijder & "'"

ik krijg de volgende foutmeldingen:

"De bewerking is niet toegestaan wanneer het object gesloten is"

en

Run-time error '3704':

Application-defined or object-defined error.

ik heb al op verschillende forms gezocht naar alle foutmeldingen en dan wordt ik doorverwezen naar MS MSDN. ik zoek dan naar MS KB article Q235340. Daar vind ik dat ik het volgende moet toevoegen: Open "SET NOCOUNT ON"
heb ik geprobeerd en dan krijg ik de error:

Runtime error '3705':
De bewerking is niet toegestaan wanneer het object geopend is.

als ik die eerste error krijg wordt de record wel verwijdert alleen die error blijf je zien.
wanneer ik dus de oplossing van MSDN gebruik verwijdert ie ook geen record meer.

groeten Alex

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 08-05 11:55

mulder

ik spuug op het trottoir

Eeehmm, je weet compleet niet waar je mee bezig bent ben ik bang. Dat is niet erg, ik zou mij wat meer inlezen als ik jou was, hier is nog een goed voorbeeld: http://msdn.microsoft.com...o270/htm/mdmthdeletex.asp

oogjes open, snaveltjes dicht


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Je zet nu de recordsource van een object dat data moet laten zien op een DELETE commando. Die geeft dus een gesloten recordset terug, en dat kun niet als datasource zetten.

Mijn tip: steek wat tijd in ADO en zorg dat je weet hoe je via het command object queries moet uitvoeren. Zo'n ADODC lijkt in het begin heel makkelijk, maar je loopt als snel tegen de beperkingen aan.

klik
klik ook

Oops! Google Chrome could not find www.rijks%20museum.nl


Verwijderd

Topicstarter
Don Facundo schreef op dinsdag 19 april 2005 @ 11:51:
Eeehmm, je weet compleet niet waar je mee bezig bent ben ik bang. Dat is niet erg, ik zou mij wat meer inlezen als ik jou was, hier is nog een goed voorbeeld: http://msdn.microsoft.com...o270/htm/mdmthdeletex.asp
het zit helaas allemaal wat ingewikkelder in elkaar..... is eigenlijk te ingewikkeld om allemaal uit te leggen, ik twijfelde ook of ik het wel zou posten, maar ik wil het wel oplossen dus ik dacht misschien heb ik gewoon wat simpels over het hoofd gezien.

En we hadden achteraf idd beter geen adodc kunnen gebruiken, we hebben idd veel beperkingen gezien ervan. Maar het kost nu teveel werk om alles over te zetten. Het is wel makkelijk adodc maar idd beperkt. ;(

Verwijderd

Topicstarter
P_de_B schreef op dinsdag 19 april 2005 @ 11:52:
Je zet nu de recordsource van een object dat data moet laten zien op een DELETE commando. Die geeft dus een gesloten recordset terug, en dat kun niet als datasource zetten.
ja ik zie wat ik fout doe. ik heb daar niet goed naar gekeken, ik heb dit gister snel gedaan en niet goed nagedacht erover.
Ik had eerst het commando:
adodc1.recordset.delete

maar dat werkt niet helemaal goed omdat ik ergens anders een koppeling heb zitten en hij verwijdert dan zowel de gebruiker als de absentie, terwijl hij alleen de absentie moet verwijderen, ik ben er dus achter gekomen dat dat door die koppeling komt, maar die koppeling heb ik nodig in het systeem.
Dus dacht ik moet ik die delete anders gaan doen.

Verwijderd

Topicstarter
Het probleem is dus dat ik een SQL Delete query niet op een recourdsource kan toepassen.
Maar hoe moet ik dit anders doen dan ? volgens mij kan dat niet anders met adodc.
en zoals ik al zei werkt het met adodc1.recordset.delete niet goed.

ik zal uitleggen waarom dat niet werkt en welke koppeling ik heb, dan begrijpen jullie de situatie beter en kunnen jullie me misschien wel helpen.

"select * from beta_absenties INNER JOIN beta_leerlingen ON beta_absenties.icarusnr=beta_leerlingen.icarusnr WHERE beta_leerlingen.status = 'actief'"

ik heb dus 2 tabellen, 1 met gebruikers en 1 met absenties. het systeem mag dus alleen gebruikers in de absentie tabel laten zien die ook voorkomen in de leerlingentabel en de status actief hebben.
en door deze koppeling verwijdert hij dus ook de gebruiker als je een absentie verwijderd.

en ik heb ook al nagedacht om die sql query aan te passen maar dat kan voor zover ik weet niet.
ik had al lang erover gedaan om die sql query goed te krijgen.
ik heb ook al "ON beta_absenties.icarusnr=beta_leerlingen.icarusnr" weggehaald maar dan doet ie het niet. of iemand anders moet een SQL query weten waarbij in de absentie tabel alleen de leerlingen worden getoond met de status actief.

ik hoop jullie nu voldoende te hebben geinformeerd over mijn probleem.

  • BertS
  • Registratie: September 2004
  • Laatst online: 13-02 08:33
Je kunt de bronquery wel aanpassen. Maak er eens dit van:
code:
1
2
3
"SELECT * FROM beta_absenties WHERE beta_absenties.icarusnr IN 
    (SELECT beta_leerlingen.icarusnr FROM beta_leerlingen 
     WHERE beta_leerlingen.status='actief'"

Vervolgens kun je in je adodc wel een Delete doen.

[ Voor 7% gewijzigd door BertS op 19-04-2005 12:23 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 07-05 22:49

curry684

left part of the evil twins

Even titel tig keer duideijker gemaakt dan "SQL Delete probleem", let daar voortaan zelf op aub :)

Professionele website nodig?


Verwijderd

Topicstarter
bee-es schreef op dinsdag 19 april 2005 @ 12:23:
Je kunt de bronquery wel aanpassen. Maak er eens dit van:
code:
1
2
3
"SELECT * FROM beta_absenties WHERE beta_absenties.icarusnr IN 
    (SELECT beta_leerlingen.icarusnr FROM beta_leerlingen 
     WHERE beta_leerlingen.status='actief'"

Vervolgens kun je in je adodc wel een Delete doen.
Je was nog een haakje achter 'actief'" vergeten maar hij werkt wel.
bedankt. Ik was nog naar een leraar gegaan van databases.
die wist het ook niet :?

  • Elissen
  • Registratie: Januari 2000
  • Laatst online: 12-03 16:55
Kan je de delete niet gewoon uitvoeren op de ADOConnectie?
Delphi:
1
ADOConnection.Execute('DELETE FROM ....');

adodc = een command object? Ik dacht dat je aan moet geven dat als een query geen resultaat heeft (zoals INSERT, UPDATE en DELETE).
Delphi:
1
2
3
ADOCommand1.CommandText := 'DELETE FROM ...';
ADOCommand1.ExecuteOptions := [eoExecuteNoRecords];
ADOCommand1.Execute;


Dit is iig hoe ik het in Delphi doe. Bovendien is het ophalen van de records en die vervolgens stuk voor stuk verwijderen inefficient. Negeer mij als het in VB helemaal anders gaat, nog nooit ADO in VB gebruikt.
Pagina: 1