[vb] records toevoegen aan database

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

  • wboard
  • Registratie: Juli 2002
  • Laatst online: 04-04-2022

wboard

-=<wboard>=-

Topicstarter
Ik probeer records toe te voegen aan een database "administration.mdb", maar na het uitvoeren van onderstaand script, staat er vervolgens niets in de database.
Ik heb gekeken bij andere topics over dit probleem, maar niets lost dit probleem op.

dit is de code:
code:
1
2
3
Set dbFile = OpenDatabase("c:\administration.mdb ")
dbFile.Execute "INSERT INTO ClientInfo (company,address,postal_code) VALUES ('japio','ad','asdfasd')"
dbFile.Close


Haal ik wat door elkaar, of wat is het probleem?

A smooth sea never made a skilled sailor


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Wordt die code uberhaupt wel uitgevoerd?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Wat doet die spatie achter de filename?
Krijg je foutmeldingen?

Who is John Galt?


  • wboard
  • Registratie: Juli 2002
  • Laatst online: 04-04-2022

wboard

-=<wboard>=-

Topicstarter
nee geen foutmeldingen en ik voer hem uit door op een command button te klikken, dat werkt wel, want eerder kreeg ik foutmeldingen (nu dus niet meer)

spatie maakt niet uit, geen verschil met of geen

[ Voor 15% gewijzigd door wboard op 07-10-2003 21:15 ]

A smooth sea never made a skilled sailor


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

Nogmaals de vraag: wordt de code uitgevoerd? Probeer het eens met een breakpoint en step eens door deze regels code heen, kijk of daar iets gebeurt. Houd ondertussen in de gaten of je variabelen de waarden hebben die je verwacht.

Wat gebeurt er als je een ander simpel statement probeert uit te voeren? Een DELETE of ALTER TABLE bijvoorbeeld?

Enne... als je met VB werkt, is een ADO-connection dan niet een stuk verstandiger dan dit? Heb je het daarmee al eens geprobeerd te maken?

My personal website


  • wboard
  • Registratie: Juli 2002
  • Laatst online: 04-04-2022

wboard

-=<wboard>=-

Topicstarter
De code wordt uitgevoerd. Wanneer ik het anders probeer
code:
1
2
3
4
5
6
7
8
9
10
    Set RecSet = ClientInfo.OpenRecordset
'Create new records in AddressList
    RecSet.AddNew
    RecSet("company") = "dsfadfsdf"
    RecSet.Update
    
'Close the Recordset
    RecSet.Close
    
    dbFile.Close

geeft hij de volgende foutmelding: Object variable or with block not set.

Maar dit is toch niet wat ik wilde, ik wil met sql queries werken.

Als ik met mijn eerste code (1ste post) werkt en ik voer een simpele querie als DELETE uit, dan.
Een ADO-connection heb ik nog niet geprobeerd te maken, maar dat kan dit probleem toch niet veroorzaken??

----------------edit
Het is dus wel gelukt met ADO, zoals jij zei, hij voegt de data toe aan de database.
Maar wanneer ik dit opnieuw doet, gaat hij zeiken "dat de opgegeven wijzigingen aan de tabel niet zijn aangebracht omdat zij dubbele waarden zouden opleveren voor de index, primaire sleutel of relatie. Wijzig de gegevens in het veld of de velden die dubbele gegevens bevatten of defineer de index opnieuw"

Wat zou nu het probleem weer zijn, ik heb 3 tabellen, die aan elkaar zijn gekoppeld d.mv. onderstaande code, dit dus 2 keer omdat ik 3 tabellen heb
code:
1
2
3
4
5
6
7
        'foreign tabel aanmaken met primary tabel
        Set relation = dbFile.CreateRelation("foreign", "ClientInfo", "OffInfo")
        relation.Attributes = 0
        Set OIFields(4) = relation.CreateField("clientnr")
        OIFields(4).ForeignName = "clientnr"
        relation.Fields.Append OIFields(4)
        dbFile.Relations.Append relation

A smooth sea never made a skilled sailor


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 18:33
Volgens mij moet je je iets meer verdiepen in de theorie achter een database.

Als je een Primary Key ( PK ) kolom hebt, mogen hier alleen maar unieke waarden instaan. Zelfde geld voor een unique key constraint die je hebt aangebracht op een van de kolommen.

Verder, Object Variable or With Block Not Set betekent dat je ergens een object hebt gedeclareerd ( Dim Blaat as ADODB.Recordset ) maar geen nieuw object hebt geinstantieerd ( Set Blaat = new ADODB.Recordset )

Sla je docs er nog eens op na zou ik zeggen.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • wboard
  • Registratie: Juli 2002
  • Laatst online: 04-04-2022

wboard

-=<wboard>=-

Topicstarter
je hebt gelijk, dom van me, ik voerde iedere keer dit onderstaande uit.
code:
1
cmd.CommandText = "INSERT INTO ClientInfo (company,clientnr) VALUES ('hrrbv','2332')"

dus telkens de unieke waarde het zelfde.

maar nog 1 vraag, moet ik hem nu zelf telkens ophogen, want ik bv met mysql, update de database hem zelf en als ik hem hier leeglaat o.i.d. dan vult hij zelf dus niet automatisch een hoger nummer in. (klant nummer).
Hoe zit dat? Of moet ik dus bij het aanmaken van mijn database de primary key instellen op het klantnummer

[ Voor 14% gewijzigd door wboard op 09-10-2003 16:55 ]

A smooth sea never made a skilled sailor


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

Dat ligt er aan...
Als je een constraint op een veld hebt gelegd, maar het veld is geen autonummering-veld, dan zul je inderdaad elke keer zelf een unieke waarde in het veld moeten gooien. Anders vult hij het veld elke keer zelf met een nieuwe, unieke waarde.

My personal website


  • wboard
  • Registratie: Juli 2002
  • Laatst online: 04-04-2022

wboard

-=<wboard>=-

Topicstarter
En hoe kun je het zo maken dat het veld autonumm. is? ik dacht dat het zo was:
code:
1
2
3
OIIndex.DistinctCount = True 
'of
OIIndex.Properties.count = True


Nog leuker, nu doet geeft hij waar hij gisteren geen foutmelding op gaf bij * een foutmelding. >> "User-defined type not defined" Heel raar want hij refereert helemaal niet naar een user-defined type, maar doet dat wel :S, wat zou dat nou weer kunnen zijn :S
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Dim ADOCON As ADODB.Connection '*   << hier dus
Dim cmd As ADODB.Command

Set ADOCON = New ADODB.Connection
ADOCON.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\administration.mdb;Persist Security Info=False;"
ADOCON.Open ADOCON.ConnectionString

Set cmd = New ADODB.Command
Set cmd.ActiveConnection = ADOCON

cmd.CommandType = adCmdText
cmd.CommandText = "INSERT INTO ClientInfo (company,clientnr) VALUES ('hrrbv','44')"
cmd.Execute

ADOCON.Close ADOCON.ConnectionString

[ Voor 101% gewijzigd door wboard op 09-10-2003 17:24 ]

A smooth sea never made a skilled sailor


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

Heb je ADO wel aan staan bij je references? Als je die melding krijgt namelijk (waarschijnlijk) niet.

NOFI, maar het lijkt er op dat je de klok ergens ver weg hebt horen luiden en nu bij ons allerlei klepels komt zoeken....?

My personal website


  • wboard
  • Registratie: Juli 2002
  • Laatst online: 04-04-2022

wboard

-=<wboard>=-

Topicstarter
precies.. :D. Qua databases onder vb, ben ik nog niet zo ervaren...
ik zal wel even kijken onder de ref. voor ado, volgens mij stond hij gewoon aan, want dat heb ik nl. gedaan, maar goed :S.

A smooth sea never made a skilled sailor


  • wboard
  • Registratie: Juli 2002
  • Laatst online: 04-04-2022

wboard

-=<wboard>=-

Topicstarter
je hebt gelijk, maar dit vindt ik heel raar.... gisteren deed hij het wel...
maar goed, in ieder geval bedankt.
Weet iemand hoe je een de unieke sleutel automatisch kan ophogen ???
kan het nergens vinden.

[ Voor 30% gewijzigd door wboard op 11-10-2003 22:05 ]

A smooth sea never made a skilled sailor


  • wboard
  • Registratie: Juli 2002
  • Laatst online: 04-04-2022

wboard

-=<wboard>=-

Topicstarter
Ik weer een probleempje waar ik al een tijdje mee aan het prutsen bent. Heb gezocht hier op GoT, maar vindt nix relevants. Ik post dit probleempje hier wel weer, omdat het over het zelfde programma gaat.

Ik wil selectief mij data uit de database selecteren mbv. een SQL statementje. Die selectief geselecteerde (?) data wil ik dan in een DBGrid proppen, zodat ik niet alle irrellevante data in mijn grid heb. Ik heb het nu zo gedaan:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
        Call ConDB(FN, 0) 'db openen

        Set QDF = dbFile.CreateQueryDef("", "SELECT company FROM ClientInfo") ''%" & sQuery & "%'
        QDF.SQL = "SELECT company FROM ClientInfo"
        Set QEX = QDF.OpenRecordset
    
        Set DBResult = QEX
         
        
        DBResult.MoveLast
        DBResult.MoveFirst
        CountRecords = DBResult.RecordCount
         
        If CountRecords < 1 Then
            MsgBox ("niets gevonden hahahahah")
        Else          
            MsgBox (DBResult("company"))
        End If
    
    start_form.datSelectTable.DatabaseName = FN 'database source opnieuw definiëren
    start_form.datSelectTable.Recordset.Filter = ("SELECT company FROM ClientInfo")
        start_form.datSelectTable.Recordset.Requery 
        start_form.datSelectTable.Refresh

'^^^^^^^^^^^^^^^^^^^^^^ hierboven gaat het om. Dit wil hij dus niet doen.
    
        Call ConDB("", 1) 'database sluiten


Wanneer ik dit uitvoer krijg ik de foutmelding "Object doesn't support property or method"
Ik gebruikt nu blijkbaar een ongeldige property, maar wat is de juiste dan?
Ik heb ook al geprobeer om de recordset aan te roepen door
code:
1
 start_form.datSelectTable.Recordset.OpenRecordset ("SELECT company FROM ClientInfo")
maar dit werkt ook niet? Heeft iemand een ideetje?

A smooth sea never made a skilled sailor


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 18:33
Waarom zo godsgruwelijk moeilijk doen ?

Maak een recordset op basis van je query, check op BOF/EOF ( En dus niet op Recordcount ) en wijs dit ding toe aan je grid datasource. Klaar.

[edit]

Ff een voorbeeldje in ADO, maar DAO mag niet veel anders zijn :

Visual Basic:
1
2
3
4
    Dim rst as Recordset
    Set rst = new Recordset
    Call rst.Open("SELECT * FROM [Blaat] WHERE [BlaatID]=1", Connection
    Set grdZappers.DataSource = rstZappers

[ Voor 43% gewijzigd door farlane op 15-10-2003 16:49 ]

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • wboard
  • Registratie: Juli 2002
  • Laatst online: 04-04-2022

wboard

-=<wboard>=-

Topicstarter
waar haal je die rstZappers vandaan ??? En DataSource is geen property van een DBGrid. Ik kan het dan wel in een FlexGrid gooien o.i.d. met flexgrid werkt dat datasource wel.

[ Voor 35% gewijzigd door wboard op 15-10-2003 17:09 ]

A smooth sea never made a skilled sailor


  • wboard
  • Registratie: Juli 2002
  • Laatst online: 04-04-2022

wboard

-=<wboard>=-

Topicstarter
Ik word echt gek, bij vb doet je programma iedere keer weer wat anders, nu geeft hij als ik deze query uitvoer en dan 'company' eruit probeer te halen deze fout (bij deze query: SELECT * FROM ClientInfo)

'runtime error 3265'
'item not found in this collection'

Er zit duidelijk data in de tabel ClientInfo.
Wat kan dit nu weer zijn :S ???

A smooth sea never made a skilled sailor


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 18:33
wboard schreef op 15 October 2003 @ 17:08:
waar haal je die rstZappers vandaan ??? En DataSource is geen property van een DBGrid. Ik kan het dan wel in een FlexGrid gooien o.i.d. met flexgrid werkt dat datasource wel.
Hum, dat was een foutje, aangezien deze code was gekopieerd uit een projectje van mezelf .....
Ik ff niet welke grids er allemaal zijn, datagrid flexgrid dbgrid whatever. Een van die grids is voor DAO ( Als je dat perse wilt gebruiken ) en die heeft een property waar je een recordset aan kunt knopen. En die bedoelde ik.

Nogmaals dan

Visual Basic:
1
2
3
4
    Dim rst as Recordset
    Set rst = new Recordset
    Call rst.Open("SELECT * FROM [Blaat] WHERE [BlaatID]=1", Connection
    Set grdBlaat.DataSource = rst
'runtime error 3265'
'item not found in this collection'
Misschien niet helemaal onverwacht maareuh ... deze melding betekent dat ie een veld niet kan vinden in je dataset. Heb je een typefout gemaakt oid ?
Anders druk je ff op [debug] bij deze melding, dan kun je exact zien op welke regel het fout gaat.

[ Voor 38% gewijzigd door farlane op 16-10-2003 08:52 ]

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • wboard
  • Registratie: Juli 2002
  • Laatst online: 04-04-2022

wboard

-=<wboard>=-

Topicstarter
Dat snap ik ja, maar het rare is dat ik dus geen TypFout gemaakt heb.
Als ik nl. Select * from Tabel uitvoert doet hij het wel en als ik wat specifieker gaat
select * from tabel where record = 'iets', dan gaat hij zeiken, terwijl die record met die waarde dus wel bestaat. :S

A smooth sea never made a skilled sailor


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 18:33
Ik denk dat je iets anders fout doet, want ook al zou de recordset leeg zijn dan zou ie nog die melding niet geven.

Ik denk dat je in je grid een of ander veld hebt opgegeven dat niet bestaat in je resultset.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • wboard
  • Registratie: Juli 2002
  • Laatst online: 04-04-2022

wboard

-=<wboard>=-

Topicstarter
[edit]ik kan NIET selectief selecteren met clientnr, DUS WHERE clientnr = '1'

Ik heb het probleem half achterhaald, ik kan niet selectief selecteren op clientnr, dit is mijn primary en unieke key: >>> zo aangemaakt.
code:
1
2
3
4
        Set CIIndex = ClientInfo.CreateIndex("clientnr")
        CIIndex.Primary = True
        CIIndex.Unique = True
        CIIndex.Required = True

Waarom kan ik niet op de unieke key selecteren??
[sql]
SELECT [company] FROM ClientInfo WHERE [clientnr] = '1'; 'die 1 is een test (die bestaat dus)
[/sql]
> op een ander veld kan ik wel selecteren :S


offtopic:
Kun je trouwens ook fulltext toepassen in een vb database?

[ Voor 35% gewijzigd door wboard op 16-10-2003 22:02 ]

A smooth sea never made a skilled sailor


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 18:33
Dat clientnummer is dat wel een stringtype ? Probeer het eens zonder die accenten.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Xanion
  • Registratie: Augustus 2001
  • Laatst online: 03-08 20:18
Ik vindt dit de makkelijkste (en vooral overzichtelijkste) manier om records toe te voegen aan een access database. Werkt altijd.

code:
1
2
3
4
5
6
7
8
9
10
Dim NaamDatabase As DAO.Database
Dim NaamRecord As DAO.Recordset

Set NaamDatabase = DAO.OpenDatabase("C:\Database.mdb")
Set NaamRecord = Helpdesk.OpenRecordset("Table", dbOpenDynaset)
NaamRecord.AddNew
NaamRecord!FieldName1 = "Tekst1"
NaamRecord!FieldName2= "Tekst2"
NaamRecord!FieldName3= "Tekst3"
NaamRecord.Update

There are 10 types of people in the world: Those who understand binary, and those who don't. .


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 18:33
Mwach, ik ben op verschillende momenten geconfronteerd met situaties waarin dit niet of niet goed werkte.

SQL strings werken wel altijd, maar je moet ze wel correct formuleren natuurlijk. :)

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • whoami
  • Registratie: December 2000
  • Laatst online: 17:38
wboard schreef op 16 oktober 2003 @ 21:51:
offtopic:
Kun je trouwens ook fulltext toepassen in een vb database?
Wat bedoel je met een VB database? :?
VB is een programmeertaal, geen Database.

https://fgheysels.github.io/


  • Xanion
  • Registratie: Augustus 2001
  • Laatst online: 03-08 20:18
farlane schreef op 17 October 2003 @ 12:48:
[...]


Mwach, ik ben op verschillende momenten geconfronteerd met situaties waarin dit niet of niet goed werkte.

SQL strings werken wel altijd, maar je moet ze wel correct formuleren natuurlijk. :)
Onder welke omstandigheden werkt dit bij jou niet goed dan? Ik heb al tientallen apps gemaakt die op deze manier werken, allemaal zonder problemen.
Het grote voordeel van werken op deze manier vindt ik vooral de overzichtelijkheid, als je in een tabel met bijv: 15 velden 1 record wilt toevoegen en dit in een SQL-query stopt is dit al erg onoverzichtelijk. Hier is meteen duidelijk wat er in welk veld terechtkomt.

There are 10 types of people in the world: Those who understand binary, and those who don't. .


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 18:33
Xanion schreef op 17 October 2003 @ 14:56:
[...]

Onder welke omstandigheden werkt dit bij jou niet goed dan? Ik heb al tientallen apps gemaakt die op deze manier werken, allemaal zonder problemen.
Mn als je te snel een select doet op een tabel nadat je een insert hebt gedaan, wil het nog wel eens voorkomen dat de insert nog niet geflushed is. Dat is dan een puur timing probleem, en het komt nooit voor als je aan het testen bent.

Overigens heb ik zelf ook applicaties gemaakt die het probleem niet hebben, maar ik wil 1 manier die in alle gevallen werkt.

De overzichtelijkheid van een querystring is best te doen als je velden ook benoemd, wat zowieso aan te raden is.

Just my 2cts

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • wboard
  • Registratie: Juli 2002
  • Laatst online: 04-04-2022

wboard

-=<wboard>=-

Topicstarter
[wohami]
Oh is dat zo? >> d0h, ik bedoel een database met vb. Maar kun je dat toepassen
in een mdb database (beter gezegd). ?? :D

[ Voor 9% gewijzigd door wboard op 17-10-2003 18:14 ]

A smooth sea never made a skilled sailor


  • wboard
  • Registratie: Juli 2002
  • Laatst online: 04-04-2022

wboard

-=<wboard>=-

Topicstarter
farlane schreef op 17 oktober 2003 @ 10:12:
Dat clientnummer is dat wel een stringtype ? Probeer het eens zonder die accenten.
OK zal het ff proberen...

:SSSSSSSSS, als ik een * achter het like statement gooi, dan doet hij het wel!??!??!

Call ConDB("SELECT [company],[clientnr] FROM ClientInfo WHERE [clientnr] LIKE '" & SQuery & "*';", 0).

Geweldig, bedankt voor alle suggesties in ieder geval, als ik weer tegen een ander probleempje stuit hoor je het wel

[ Voor 43% gewijzigd door wboard op 17-10-2003 18:37 ]

A smooth sea never made a skilled sailor


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 18:33
wboard schreef op 17 October 2003 @ 18:15:
[...]
:SSSSSSSSS, als ik een * achter het like statement gooi, dan doet hij het wel!??!??!
Hoe bedoel je LIKE ? Je hebt het helemaal niet over LIKE gehad. Je zei dat je niet op die PK kolom kon filteren, wat natuurlijk dikke onzin is.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • wboard
  • Registratie: Juli 2002
  • Laatst online: 04-04-2022

wboard

-=<wboard>=-

Topicstarter
wat bedoel je trouwens met pk?kolom

Klopt, eerst had ik ook where= gebruikt, om dat wat korter is en dat wat makkelijker debuggen is. (het is strakker), daarna ging ik voor de grap (wat ik dus al wilde) ff where bla like, gebruiken, MET een *, en toen deed hij het gewoon, daarna ging ik where = weer toepassen en hij deed het waarachtig, IK zal dan blijkbaar wel een tikfout gemaakt hebben in mijn script, maar wat ik hier geplakt heb, komt zo uit mijn code. MAAR BTW, alles werkt nu, kzal het progje wel es hier neergooien.

[ Voor 4% gewijzigd door wboard op 20-10-2003 22:45 ]

A smooth sea never made a skilled sailor


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 18:33
wboard schreef op 20 oktober 2003 @ 22:36:
wat bedoel je trouwens met pk?kolom
Primary Key

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.

Pagina: 1