NL Computer Forum

Maak het zelf => Programmeren => Topic gestart door: jvdpeet † op 8 augustus 2010, 10:55:35

Titel: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 8 augustus 2010, 10:55:35
Hallo,
Ik gebruik in een programma 2 databound grids. De ene werkt perfect, toont de inhoud van de beteffende Database tabel, accepteert invoer en update de database daarmee, m.a.w., doet alles wat hij doen moet.
De andere laat de rijen en kolommen met de kolomheaders zien, toont de cursor in de eerste rij, eerste kolom, maar als je gegevens probeert in te voeren gebeurt er niets.
Vergelijken van de eigenschappen etc. tussen beide laat geen verschillen zien: alles is in beide aanwezig. Ik begrjp dan ook niet waarom de ene het wel doet en de andere niet. Ik heb het idee dat ik wat simpels over het hoofd zie, maar heb geen idee wat.  Heeft iemand een idee? De tabel bevat wel degelijk gegevens.
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 8 augustus 2010, 14:05:13
Hoi Jan,

Staan beide DBGrid's op hetzelfde formulier?
Je hebt geen extra code toegevoegd mbt tot een vullen/bewerken/waren van de DBGrid, wat je niet meegenomen hebt naar het niet-werkende grid?


Peter
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 8 augustus 2010, 18:23:50
Hoi Peter,
Beide grids staan niet op hetzelfde formulier. De code van het niet-werkende grid is in wezen hetzelfde als van het werkende grid, uiteraard met verschillende DBGrid-naam en naam van de DataSource en de data control en ook een ander formulier. Alle Allow-eigenschappen staan op True.
Volgens alle mij bekende beschrijvingen zou het niet-werkende grid het moeten doen en dus alle gegevens uit de database moeten tonen en alle veranderingen daarin via het grid onmiddellijk in de database moete updaten. Althans zo doet het werkende grid het.
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 8 augustus 2010, 18:56:32
Jan,

Dus je kan wel iets invoeren, maar het wordt niet bewaard?
Dat houdt in dat de database koppeling niet goed is. De naam van de controls mogen in principe hetzelfde zijn als van het werkende grid. Ze staan immers op een apart formulier en hebben geeen koppeling met het wel werkende DBGrid.

Heb je toevallig de DBGrid gekopieerd en dus ook wat instellingen onbewust overgenomen waardoor het niet werkende DBGrid verwijst naar het origineel?
Gooi dat DBgrid eens weg en begin met een nieuw DBGrid.

Zonder code is het lastig zoeken.


groeten, Peter
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 8 augustus 2010, 20:34:56
Peter,
Nee, ik kan niets invoeren. Het grid accepteert geen invoer: er gebeurt niets. Hier is de code. Het bestand verzenden lukt niet. Bij verzenden wordt er .log achter geplakt als extra extensie en daar kom ik niet omheen. Vandaar de code in de tekst. Sorry.
 
Hier is de code die gebruikt wordt:
Dim DividendenMatrix()
Private Sub Command1_Click()
' Opvragen dividendgegevens.
If Aanroep2 = "Followup opties" Then
'    WijzigenDividenden         ' Activeren wanneer gebruikt bij opties.
Else
    datDividenden.Recordset.Edit
    datDividenden.Recordset.Update
    DBGrid2.SetFocus
End If
End Sub
Private Sub Command10_Click()
Call AfdrukkenDividenden(DividendenMatrix(), Teller, TotaalContantDividend, TotaalStockDividendGeld, TotaalStockDividendAantal, TotaalKostenDividend, TotaalDividendBelasting)
End Sub
Private Sub Command2_Click()
' Opslaan in database
On Error GoTo FoutVerwijder
datDividenden.Recordset.Delete
datDividenden.Recordset.MoveNext
' Als het laatste record werd verwijderd, ga naar het vorige record (welke nu het laatste record is).
If datDividenden.Recordset.EOF = True Then
    datDividenden.Recordset.MovePrevious
End If
DBGrid2.SetFocus
Exit Sub
FoutVerwijder:
       Foutbron = Err.Number & " " & Err.Description & " in Verwijder"
       Call frmInvestor.WriteLOG("---< " & App.Title & " geeft >---" & Foutbron)
       Resume Next

End Sub
Private Sub Command3_Click()
 
' Ga naar het laatste record zodat de rij Voeg toe zichtbaar wordt.
datDividenden.Recordset.MoveLast
' Verplaats de cursor naar rij Voeg toe.
DBGrid2.row = DBGrid2.row + 1
DBGrid2.SetFocus
End Sub
Private Sub Command4_Click()
' Eerste dividendregel
datDividenden.Recordset.MoveFirst
DBGrid2.SetFocus
 
End Sub
Private Sub Command5_Click()
' Volgende dividendregel.
datDividenden.Recordset.MoveNext
' Houd het current record weg van EOF, wat geen geldige positie is.
If datDividenden.Recordset.EOF = True Then
    datDividenden.Recordset.MovePrevious
End If
DBGrid2.SetFocus
End Sub
Private Sub Command6_Click()
' Vorige dividendregel
datDividenden.Recordset.MovePrevious
' Houd het current record weg van BOF, wat geen geldige positie is.
If datDividenden.Recordset.BOF = True Then
    datDividenden.Recordset.MoveNext
End If
DBGrid2.SetFocus
End Sub
Private Sub Command7_Click()
datDividende.Recordset.MoveLast
DBGrid2.SetFocus
End Sub
Public Sub AnalyseDividenden()
Dim Teller As Integer
ReDim DividendenMatrix(1000, 22)
Dim TotaalContantDividend, TotaalStockDividendGeld, TotaalStockDividendAantal, TotaalKostenDividend, TotaalDividendBelasting
Teller = 1
datDividenden.Recordset.MoveFirst
Do While datDividenden.Recordset.EOF = False
    If datDividenden.Recordset("ContantDividend") > 0 Or datDividenden.Recordset("StockDividendGeld") <> 0 Or datDividenden.Recordset("StockDividendAantal") <> 0 Then
        DividendenMatrix(Teller, 1) = datDividenden.Recordset("Symbool")
        If IsNull(datDividenden.Recordset("NaamAandeel")) Then
                datDividenden.Recordset.Edit
                datDividenden.Recordset("NaamAandeel") = datDividenden.Recordset("Symbool ")
                datDividenden.Recordset.Update
        End If
        DividendenMatrix(Teller, 2) = datDividenden.Recordset("NaamAandeel")
        DividendenMatrix(Teller, 3) = datDividenden.Recordset("ContantDividend")
        DividendenMatrix(Teller, 4) = datDividenden.Recordset("StockDividendGeld")
        DividendenMatrix(Teller, 5) = datDividenden.Recordset("StockDividendAantal")
        DividendenMatrix(Teller, 6) = datDividenden.Recordset("DatumContantDividend")
        DividendenMatrix(Teller, 7) = datDividenden.Recordset("DatumStockDividendAantal")
        DividendenMatrix(Teller, 8) = datDividenden.Recordset("DatumStockDividendGeld")
        DividendenMatrix(Teller, 9) = datDividenden.Recordset("KostenDividend")
        DividendenMatrix(Teller, 10) = datDividenden.Recordset("Dividendbelasting")
        Teller = Teller + 1
        datDividenden.Recordset.MoveNext
    Else
        datDividenden.Recordset.MoveNext
    End If
Loop
Teller = Teller - 1
' Nulstellen van Null-items
For i = 1 To Teller
    For j = 1 To 21
        If IsNull(DividendenMatrix(i, j)) Then
            DividendenMatrix(i, j) = 0
        End If
    Next j
Next i
' Totaliseren van contant dividend, stockdividend in aantal en stockdividend in geld.
For i = 1 To Teller
    TotaalContantDividend = TotaalContantDividend + DividendenMatrix(i, 3)
    TotaalStockDividendAantal = TotaalStockDividendAantal + DividendenMatrix(i, 4)
    TotaalStockDividendGeld = TotaalStockDividendGeld + DividendenMatrix(i, 5)
    TotaalKostenDividend = TotaalKostenDividend + DividendenMatrix(i, 9)
    TotaalDividendBelasting = TotaalDividendBelasting + DividendenMatrix(i, 10)
Next i
End Sub
Private Sub Command8_Click()
' Sluiten van scherm Invoeren dividenden
    frmOntvangenDividenden.Hide
End Sub
Public Sub AfdrukkenDividenden(DividendenMatrix(), Teller, TotaalContantDividend, TotaalStockDividendAantal, TotaalStockDividendGeld, TotaalKostenDividend, TotaalDividendBelasting)
 
Printer.Orientation = 2
Printer.FontName = "Courier New"
Printer.FontSize = 8
TotaalDividend = TotaalContantDividend + TotaalStockDividend + TotaalStockDividendGeld - TotaalKostenDividend - TotaalDividendBelasting
frmInvestor.ResultsT.Text = frmInvestor.ResultsT.Text & "Naam Fonds" & Space(3) & "Contant" & Space(2) & "Stockdivi-" & Space(2) & "Stockdivi-" & Space(4) & "Kosten" & Space(2) & "Dividendbe-" & Space(2) & vbCrLf
frmInvestor.ResultsT.Text = frmInvestor.ResultsT.Text & Space(13) & "Dividend" & Space(2) & "dend geld" & Space(2) & "dend aantal" & Space(3) & "Dividend" & Space(1) & "lasting" & vbCrLf
For i = 1 To Teller
     frmInvestor.ResultsT.Text = frmInvestor.ResultsT.Text & DividendenMatrix(i, 2) & Space(10 - Len(DividendenMatrix(i, 2))) & Format((Format((DividendenMatrix(i, 3)), "#0.00")), "@@@@@@@@@") & Space(1) & Format(Format(DividendenMatrix(i, 4), "#0.00"), "@@@@@@@@") & Space(3) & Format(Format(DividendenMatrix(i, 5), "#0"), "@@@@@@@@") & Space(6) & Format(Format(DividendenMatrix(i, 9), "#0.00"), "@@@@@@@@") & Space(1) & Format(Format(DividendenMatrix(i, 10), "#0.00"), "@@@@@@@@") & vbCrLf
Next i
frmInvestor.ResultsT.Text = frmInvestor.ResultsT.Text & vbCrLf
frmInvestor.ResultsT.Text = frmInvestor.ResultsT.Text & "Totaal contant dividend" & Space(32 - Len("Totaal contant dividend")) & Format(Format(TotaalContantDividend, "#0.00"), "@@@@@@@@") & vbCrLf
frmInvestor.ResultsT.Text = frmInvestor.ResultsT.Text & "Totaal stockdividend geld" & Space(32 - Len("Totaal stockdividend geld")) & Format(Format(TotaalStockDividendGeld, "#0.00"), "@@@@@@@@") & vbCrLf
frmInvestor.ResultsT.Text = frmInvestor.ResultsT.Text & "Totaal stock dividend aantal" & Space(32 - Len("Totaal stockdividend aantal")) & Format(Format(TotaalStockDividendAantal, "#0"), "@@@@@@@@") & vbCrLf
frmInvestor.ResultsT.Text = frmInvestor.ResultsT.Text & "Totaal kosten dividend" & Space(32 - Len("Totaal kosten dividend")) & Format(Format(TotaalKostenDividend, "#0.00"), "@@@@@@@@") & vbCrLf
frmInvestor.ResultsT.Text = frmInvestor.ResultsT.Text & "Totaal dividendbelasting" & Space(32 - Len("Totaal dividendbelasting")) & Format(Format(TotaalDividendBelasting, "#0.00"), "@@@@@@@@") & vbCrLf
frmInvestor.ResultsT.Text = frmInvestor.ResultsT.Text & "Totaal dividend" & Space(32 - Len("Totaal dividend")) & Format(Format(TotaalDividend, "#0.00"), "@@@@@@@@") & vbCrLf
End Sub

Private Sub Command9_Click()
AnalyseDividenden
End Sub
Private Sub Form_Load()
datDividenden.DatabaseName = frmInvestor.ext(App.Path) & "DATABASE\Portef1.mdb"
datDividenden.RecordSource = "DividendenTab"
datDividenden.Visible = False
End Sub
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 9 augustus 2010, 11:37:00
Jan,

Citaat
datDividenden.RecordSource = "DividendenTab"
Weet je zeker dat dit klopt?
Is deze property ingesteld: DbGrid2.DataSource = datDividenden


Peter
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 9 augustus 2010, 17:38:57
Hoi Peter,
Ja, ik weet absoluut zeker dat deze instelling is aangebracht. Ik heb het voor de zekerheid nogmaals gecontroleerd. Juist omdat dit klopt begrijp ik niet dat hij het niet doet.
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 9 augustus 2010, 19:31:20
Hoi Jan,

Citaat
Juist omdat dit klopt begrijp ik niet dat hij het niet doet.
Dat begrijp ik dan ook niet.
Dan moet de huidige database toch ingelezen en getoond worden.
Door de property datDividenden.ReadOnly  op True te zetten is de database alleen te lezen en niet te bewerken. Standaard staat die op False.
Vul eens de absolute mapnaam in de Form_Load() event.

  Wat ik gedaan heb is een nieuw formulier gemaakt met daarin een standaard Data en DBGrid control.
Link in de IDE het DBGrid control aan het Data control middels DBGrid1.DataSource = Data1
De enige code die uitgevoerd wordt is de Form_Load event zoals je gegeven hebt:
Private Sub Form_Load()
Data1.DatabaseName = frmInvestor.ext(App.Path) & "DATABASE\Portef1.mdb"
Data1.RecordSource = "DividendenTab"
End Sub

Kun je eens hetzelfde doen. Dan zou het toch moeten werken.


groeten, Peter
 
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 10 augustus 2010, 19:49:24
Hoi Peter,
Er komt iets meer duidelijkheid in de zaak. Ik heb net als jij de oude frmOntvangenDividenden
uit het project verwijderd en er een nieuw formulier aan toegevoegd met daarin de data control datDividenden en DBGrid2 (2 omdat in mijn project 1 al in gebruik is) + in de Form_Load de DatabaseName en de RecordSource. Op jouw code DBGrid2.DataSource = datDividenden krijg ik een fout "identifier required. No compatible data source was found for this control. Add MS ADO Data Control to your project" met als toelichting "Je krijgt deze fout als je probeert een nieuw complex bound control te binden aan een oude data source of vice versa." 
Ik heb toen in Project/Components Microsoft ADO Data Control 6.0 aangevinkt en het programma-onderdeel opnieuw gedraaid, maar het probleem was niet opgelost. Ik dacht dat ik deze data control al eerder aangevinkt had, te meer daar DBGrid1 van Portefeuille geen fout gaf.  Maar misschien moet er eerst opnieuw opgestart worden, wat ik nu ga doen en kom dan hier terug.
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 10 augustus 2010, 20:01:17
Peter,
Ik heb het project gesaved en de computer opnieuw opgestart, maar hij blijft vragen om MS ADO datacontrol of MS Data Environment toe te voegen, maar deze staan aangevinkt, dus zijn al aanwezig.  Hoe nu verder?
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 10 augustus 2010, 20:07:20
Jan,

Citaat
data control datDividenden en DBGrid2 (2 omdat in mijn project 1 al in gebruik is)
Als DBGrid1 alleen binnen het hoofdformulier bekend is, mag elk ander formulier ook gewoon een DBGrid1 control bevatten.
Dus, frmA.DBGrid1 en frmB.DBGrid1 is geen enkel probleem.
Dat geldt voor alle soorten controls trouwens.

Citaat
Op jouw code DBGrid2.DataSource = datDividenden krijg ik een fout
Vreemd. Waarom werkt het dan wel op je andere formulier en kreeg je deze fout niet eerder?
Bijgevoegd 2 plaatsjes van de VB6 IDE zoals ik dat hier heb voor jouw project-test.

(http://www.nlcomputerforum.nl/index.php?action=dlattach;topic=1939.0;attach=1039)

(http://www.nlcomputerforum.nl/index.php?action=dlattach;topic=1939.0;attach=1041)


Peter
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 11 augustus 2010, 10:58:08
Hoi Peter,
Ik had deze instellingen al op één na, ik had OLE Automation nog niet, maar nu wel. Maar hij doet het nog steeds niet. Het gekke is echter dat ik, ondanks dat ik die niet zelf handmatig ingesteld heb, alle velden met naam in het grid heb. Dit betekent dus dat er wel verbinding met de database is, want daar zullen ze aan ontleend zijn. Alleen het invoeren van gegevens lukt niet, ondanks dat het geen read-only is.
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 11 augustus 2010, 11:24:23
Hoi Jan,

De database heb je toevallig niet al ergens anders in Exclusive mode geopend?
Kun je wel met de muis of pijltjestoetsen velden selecteren in het DBGrid ?

Controleer deze properties:
With DBGrid2
   .AllowUpdate = True
   .DataMode = 0 - Bound
   .DataSource = datDividenden
   .Enabled = True
End With

With datDividenden
   .Connect = Access 2000;
   .DefaultType = 2 - UseJet
   .Enabled = True
   .Exclusive = False
   .Options = 0
   .ReadOnly = False
   .RecordsetType = 1 - Dynaset
End With

Als bovenstaande geen verbetering geeft, open dan eens de projectfile (het .VBP bestand) met Notepad. Post alle regels die beginnen met "Reference=" en "Object="


Peter
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 11 augustus 2010, 13:30:20
Hoi Peter,
Ik heb de database niet ergens anders in Exclusive mode geopend. Ik kan wel met de muis en met de pijltjestoetsen van het ene naar het andere vakje gaan, maar als ik iets typ gebeurt er niets. Alle properties die je opgaf zijn correct. Daarom hier de .vbp-regels met "Reference = " en "Object = ".
Reference=*\G{ECDCAED1-6F9C-11D0-B4D0-00A0C911E8B6}#1.0#0#E:\vb5\visdata.exe#VisData Database Utility
Reference=*\G{BE83C60B-9BCA-41FD-9972-CEC06B92E3E9}#2d.0#0#C:\WINDOWS\system32\HoadleyCBOE.dll#HoadleyCBOE
Reference=*\G{124FFB65-E4DB-11D5-89B6-444553540000}#421.0#0#C:\WINDOWS\system32\HoadleyOptionsAddin.dll#HoadleyOptionsAddin
Reference=*\G{00025E01-0000-0000-C000-000000000046}#5.0#0#C:\Program Files\Common Files\Microsoft Shared\DAO\dao360.dll#Microsoft DAO 3.6 Object Library
Reference=*\G{976092BA-719D-4A0F-B088-075933FFA852}#1.0#0#..\..\..\EViews7\EViewsMgr.dll#EViews 1.0 Type Library
Reference=*\G{27796B34-A6F1-4203-895D-EFA9AF2FEF29}#1.0#0#..\..\..\EViews7\EViewsOleDbProvider.dll#EViewsOleDbProvider 1.0 Type Library
Reference=*\G{2A75196C-D9EB-4129-B803-931327F72D5C}#2.8#0#C:\Program Files\Common Files\system\ado\msado15.dll#Microsoft ActiveX Data Objects 2.8 Library
Reference=*\G{C0E45030-5775-11D0-B388-00A0C9055D8E}#1.0#0#C:\Program Files\Common Files\designer\MSDE.DLL#Microsoft Data Environment 1.0
Reference=*\G{B257B8C0-84F6-11D0-B3B0-00A0C9055D8E}#1.0#0#C:\Program Files\Common Files\designer\DEEXT.TLB#Microsoft Data Environment Extensibility Objects 1.0
Object={00025600-0000-0000-C000-000000000046}#5.2#0; Crystl32.OCX
Object={5E9E78A0-531B-11CF-91F6-C2863C385E30}#1.0#0; MSFLXGRD.OCX
Object={F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0; comdlg32.ocx
Object={97304F10-8DA9-11D1-8C48-0080C83EC00F}#1.0#0; graphdtc.ocx
Object={2601F9E0-5409-11D5-89B6-0050DAC5F536}#3.2#0; HoadleyCalendar.ocx
Object={E2D94FA3-F1C9-11D4-B10C-00508B128EF5}#1.0#0; OptiGA.ocx
Object={827E9F53-96A4-11CF-823E-000021570103}#1.0#0; graphs32.ocx
Object={CDE57A40-8B86-11D0-B3C6-00A0C90AEA82}#1.0#0; MSDatGrd.ocx
Object={00028C01-0000-0000-0000-000000000046}#1.0#0; DBGRID32.OCX
Object={831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0; mscomctl.OCX
Object={86CF1D34-0C5F-11D2-A9FC-0000F8754DA1}#2.0#0; mscomct2.ocx
Object={A8B3B723-0B5A-101B-B22E-00AA0037B2FC}#1.0#0; GRID32.OCX
Object={BEC61919-E6C4-11D1-BE7D-C63815000000}#1.0#0; FLEXWIZ.OCX
Object={0842D103-1E19-101B-9AAF-1A1626551E7C}#1.0#0; GRAPH32.OCX
Object={67397AA1-7FB1-11D0-B148-00A0C922E820}#6.0#0; MSAdoDc.ocx
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 11 augustus 2010, 13:45:41
Jan,

Citaat
Ik kan wel met de muis en met de pijltjestoetsen van het ene naar het andere vakje gaan, maar als ik iets typ gebeurt er niets.
Vreemd. De referenties en Objects zijn precies hetzelfde.
Als je geen extra code op je formulier hebt staan dat invoer controleerd of vergrendelt, dan weet ik het ook niet meer.
De enigste tip is nog: begin met een nieuw kaal formulier, zet daarin alleen de Data en DBGrid control en de 2 regels in de Form_Load event om de DBGrid te vullen.


Peter
 
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 11 augustus 2010, 14:19:56
Hoi Peter,
Die laatste tip had ik al opgevolgd, om eventuele andere invloeden uit te sluiten. Ik zal nog eens een nieuwproject maken met alleen dat ene formulier. Andere zaken uit mijn project kunnen dan niets verzieken.
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 11 augustus 2010, 21:30:52
Hoi Peter.
Ik heb een nieuw project gemaakt met 1 formulier met de data control en DBGrid1 erop. De code ingevoerd en het project gedraaid. Zelfde resultaat. Er is dus iets mis met dit grid. Maar waarom dan wel bij dit formulier en grid, maar niet bij een vergelijkbare toepassing. Ik heb op internet echer iets gevonden wat het verklaart. Ik heb door de tijd databases gemaakt in verschillende versies van VB. Nu blijkt dat dit grid niet goed werkt voor oudere versies database zoals ADO. Ik ben de link vergeten, maar het artikel heette Q170163.  Het is dus mogelijk dat dit toevallig een database is van de oudere versie. Ik zal proberen op internet een vervanger voor dit grid te vinden.
 
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 11 augustus 2010, 21:47:43
Hoi Jan,

Gelukkig dat deze misery opgelost is.

Citaat
Ik ben de link vergeten, maar het artikel heette Q170163.
Je bedoeld deze pagina?: http://support.microsoft.com/kb/170163/ (http://support.microsoft.com/kb/170163/)

Citaat
Ik zal proberen op internet een vervanger voor dit grid te vinden.
Is het niet handiger om eenmalig de database aan te passen. Met verschillende soorten databases werken lijkt me nu niet echt makkelijk te onderhouden programma-code op te leveren. :-\


groeten, Peter
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 12 augustus 2010, 01:09:38
Hoi Peter,
Ja het is inderdaad handiger met één formaat database te werken, maar ik weet niet hoe er achter te komen wat elke database voor formaat is. Ik heb eens geprobeerd alles te converteren, maar dat was toen geen succes, vanwege het verband tussen Access zoals gebruikt in VB en zoals gebruikt in Microsoft Office Access. Dat gaf toen problemen. En omdat ik verder geen last had van het bestaan van meer dan één formaat heb ik ervan afgezien verder tijd en energie te besteden aan de conversie, te meer waar ik niet wist welke database welk formaat was. (Ik weet echter vrij zeker dat tabel DividendenTab van database Portef1.mdb een ADO-databasetabel is). Een nieuwe database maken en de gegevens overhevelen bracht toen het probleem met zich, dat je gevaar liep de gegevens uit de database te verliezen en omdat deze historische gegevens een cruciale rol spelen in het betreffende programma was ik daar huiverig voor.
Overigens Peter, bedankt voor je vele adviezen. Ik zou er nog graag een krijgen. In bovenstaand artikel Q170163 staat dat in sommige gevallen inderdaad de data niet worden weergegeven en ze bieden daar ook een oplossing voor. Die oplossing heeft te maken met de cursor. Er wordt ook code gegeven om het op te lossen, maar helemaal duidelijk is die oplossing niet voor mij. Ik heb de betreffende code toegevoegd, maar dat geeft een error. Misschien dat het jou wat meer zegt.
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 12 augustus 2010, 12:12:06
Hoi Jan,

Ik weet niet welke fout jij krijgt. Deze melding krijg ik:
(http://www.nlcomputerforum.nl/index.php?action=dlattach;topic=1939.0;attach=1061)

Dit werkt wel:
Private Sub DataClass_Initialize()
Dim cn, rs

Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
rs.CursorType = adOpenStatic
cn.Provider = "Microsoft.Jet.OLEDB.4.0"
cn.Open "nwind.mdb"               '<-- database naam
rs.Open "customers", cn

End Sub


Peter
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 12 augustus 2010, 13:10:33
Hoi Peter,
Ik kreeg inderdaad dezelfde fout als jij. Ik heb jouw verbeterde code geprobeerd, maar krijg fout "User-defined type not defined" op
cn = New.ADOBDB.ConnectionSet, maar weet niet hoe te definiëren. Omdat ik aan gebruik van de data control voldoende heb, heb ik geen ervaring met het zelf programmeren van de database.
 
 
Jan
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 12 augustus 2010, 13:36:46
Jan,

Citaat
maar krijg fout "User-defined type not defined"
Heb je deze referentie aan je project toegevoegd?
"Microsoft ActiveX Data Objects 2.8 Library"


Peter
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 12 augustus 2010, 17:45:25
Hoi Peter,
Ja die zit in de References.
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 12 augustus 2010, 19:28:52
Hmm, het wordt steeds gekker  ::) .
Vervang de sub eens door deze:
Private Sub DataClass_Initialize()
Dim cn, rs

Set cn = CreateObject("ADODB.Connection")
cn.Provider = "Microsoft.Jet.OLEDB.4.0"
cn.Open "nwind.mdb"
Set rs = CreateObject("ADODB.recordset")

rs.Open "customers", cn
End Sub

Dat zou hetzelfde moeten doen. Hoe doet die het?


Peter
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 12 augustus 2010, 20:00:18
Hoi Peter,
Deze geeft precies dezelfde fout op dezelfde regel. Ik heb nog geprobeerd het op te lossen door Dim cn uit te breiden tot Dim cn As Connection, maar ook dat helpt niet.
 
 
Groetjes,
 
Jan
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 12 augustus 2010, 20:37:41
 :tsja:
Als dit een test-project is, dus zonder verdere database koppelingen, verwijder dan eens de referentie "Microsoft ActiveX Data Objects 2.8 Library".
Sla je project op en sluit VB6 af.
Herstart je computer
Start alleen het VB6 project.
Voeg de referentie weer toe.

Hopelijk scheelt dat.


Peter
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 13 augustus 2010, 12:52:45
Hoi Peter,
Dat geeft hetzelfde resultaat.
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 13 augustus 2010, 13:05:10
Citaat
Dat geeft hetzelfde resultaat.
:tsja:
Dan weet ik het ook niet meer. Misschien een meelezer.
Probeer je vraag eens op een ander forum, bijv. MSDEVAPPS (http://community.compuserve.com/n/pfx/forum.aspx?nav=start&webtag=ws-msdevapps) , MSOFFICE (http://community.compuserve.com/n/pfx/forum.aspx?webtag=ws-msoffice) of VBFORUMS (http://www.vbforums.com/index.php?).

Mocht je een oplossing hebben, laat het dan even weten.


groeten, Peter

Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 17 augustus 2010, 12:52:37
Hoi Peter,
Heb ik gedaan en kreeg het volgende antwoord:
< DBGrid appears to have been intended to work with the long-dead RDO, not ADO. RDO was an old COM wrapper for ODBC that was meant to supplement DAO.

DBGrid's DataSource is an ICursor, not an IRowset. >

Heb de NWind database in jouw code vervangen door de voor dividende toepasselijke database en recordset en ben de Connection-fout nu kwijt zonder dat ik iets anders hier aan veranderd heb, maar krijg nu error 3709 op rs.Open "DividendenTab".
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 17 augustus 2010, 13:36:24
Hoi Jan,

Citaat
maar krijg nu error 3709 op rs.Open "DividendenTab"
Staat er wel ", cn" achter die rs.Open opdracht?

Plaats deze regel voor de regel rs.Open "DividendenTab":
rs.ActiveConnection = cn

Peter
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 17 augustus 2010, 14:02:34
Hoi Peter,
Die cn was ik inderdaad vergeten. Nu is de fout weg, maar ondanks dat er geen fouten meer zijn doet hij nog steeds niets. Mogelijk krijg ik nog meer reacties op dat andere forum.
 
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 17 augustus 2010, 14:24:29
Hoi Jan,

Mooi dat de fout opgelost is. Het enige wat deze code doet is de database openen en een koppeling maken met de recordset. Dat lijkt dus te werken.
Het vullen van de grid en het weer loskoppelen en sluiten van de database is dus niet inbegrepen. Dat moet je nog doen!

Hier staat een voorbeeld:
http://www.timesheetsmts.com/adotutorial.htm (http://www.timesheetsmts.com/adotutorial.htm)


Peter
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 17 augustus 2010, 16:53:19
Hoi Peter,
We zijn dus weer een stapje verder. Ik heb nu een aanpassing gemaakt en hoewel er misschien wel iets te veel code in staat, heb ik alleen iets toegevoegd en zo min mogelijk weggehaald. Wat vind je van deze code?
<Dim cn, rs
Set cn = CreateObject("ADODB.Connection")
cn.Connection.Open
cn.Connection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source" & _
    App.Path & "\DATABASE\Portef1.mdb;Mode=Read|Write"
cn.Open App.Path & "\DATABASE\Portef1.mdb"
Set rs = CreateObject("ADODB.recordset")
rs.Open "DividendenTab", cn
>
Ik krijg nu error 3704. Ik heb geprobeerd die weg te krijgen door cn.Connection.Open toe te voegen, maar dat helpt niet. Kennelijk heeft het gesloten zijn betrekking op iets anders dan Connection.  Waarschijnlijk moet ik cn.Connection.Open weghalen en
cn.Open App.Path & "\DATABASE\Portef1.mdb" een regel of twee naar voren halen.
 
groeten,
 
Jan
 
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 18 augustus 2010, 00:08:01
Hoi Jan,

Even eerst algemene opmerking. Plaats programma-code gescheiden van normale tekst zodat de code niet verminkt wordt door html-code die in de berichten-editor gebruikt wordt.
Dat doe je door op de knop (http://www.nlcomputerforum.nl/Themes/silentwave_20rc3/images/bbc/code.gif) boven de berichteneditor te klikken en de programma-code ertussen te plaatsen.
Je krijgt dan bijvoorbeeld:
[ code]Dit is programma-code.[ /code]
Citaat
error 3704...
Ja, dat klopt. De errortekst lijkt me vrij duidelijk: "The operation requested by the application is not allowed if the object is closed.
Even door de code stappen en je komt bij cn.Connection.Open uit.
 Dat kan daar nog niet want cn.ConnectionString of cn.Provider is niet ingesteld.

Bekijk dit eens en pas de veldnamen aan die jij gebruikt.
Dim cn, rs
Dim DBfile As String

DBfile = App.Path & "\DATABASE\Portef1.mdb"
Set cn = CreateObject("ADODB.Connection")
cn.Open "Provider = Microsoft.Jet.OLEDB.4.0;Data Source = " & DBfile & ";Mode=Read|Write"

'maak een recordset
Set rs = cn.Execute("Select * From country")

' doorloop de recordset en toon alle elementen van de kolom 'name'
Do While Not rs.EOF
   MsgBox rs("name")
   rs.MoveNext
Loop

'sluit de recordset en database
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing


groeten, Peter
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 18 augustus 2010, 13:10:28
Hoi Peter,
Deze code werkt inderdaad zonder fouten en toont alle waarden in een kolom van de tabel. Dit betekent dat er inderdaad verbinding is met de databasetabel. Maar ondanks de Read | Write accepteert het grid nog steeds geen invoer.
Er ontbreekt dus kennelijk toch nog een instelling.
 
 
Jan
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 18 augustus 2010, 16:19:17
Hoi Peter,
VBFORUM gaf het volgende commentaar op de in het voorgaande gebruikte code:
Using cn.Execute to open a recordset is the wrong thing to do, for the same reason as before - because it opens a Read-only recordset (and also Forward-Only, which isn't right either).


Jan
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 19 augustus 2010, 11:44:45
Hoi Jan,

Kijk het eens naar dit voorbeeld. Het maakt gebruik van een listbox, 4 textboxen en 2 commandbuttons. De code en commentaar regels spreken hopelijk voor zich.
De database bestaat uit een tabel 'country' met daarin de velden 'name', 'capital', 'continent', 'area' en 'population'. De eerste 3 velden zijn strings, de laatste 2 velden zijn nummeriek.

Option Explicit

Dim cn, rs

Private Sub Form_Load()

Set cn = New ADODB.Connection
cn.Provider = "Microsoft.Jet.OLEDB.4.0"
cn.Open App.Path & "\database\portef1.mdb"

Call RefreshList
End Sub

Private Sub Form_Unload(Cancel As Integer)
'sluit database koppelingen en geef geheugen vrij
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
End Sub

Private Sub RefreshList()
'ververs lijst
Set rs = cn.Execute("Select * From country")

'doorloop alle records en vul lijst met landnamen
List1.Clear
Do While Not rs.EOF
   List1.AddItem rs("name")
   rs.MoveNext
Loop
End Sub

Private Sub List1_Click()
'toon gegevens van land
Dim rs2

Set rs2 = cn.Execute("Select * From country Where name = '" & List1.List(List1.ListIndex) & "'")
Text1(0).Text = rs2("capital")
Text1(1).Text = rs2("continent")
Text1(2).Text = rs2("area")
Text1(3).Text = rs2("population")
Set rs2 = Nothing
End Sub

Private Sub Text1_KeyPress(Index As Integer, KeyAscii As Integer)
'invoerveld alle velden van record
'update het record als op ENTER gedrukt wordt
Dim ix As Integer
Dim sql As String
Dim rs2

If KeyAscii = vbKeyReturn Then
   KeyAscii = 0         'geen piepje
   Select Case Index    'welk veld is gewijzigd?
      Case 0: sql = "capital"
      Case 1: sql = "continent"
      Case 2: sql = "area"
      Case 3: sql = "population"
   End Select
   sql = "Update country Set " & sql & "='" & Text1(Index).Text & "' where name='" & List1.List(List1.ListIndex) & "'"
   Set rs2 = cn.Execute(sql)
   ix = Index + 1
   If ix > Text1.UBound Then ix = 0
   Text1(ix).SetFocus   'zet focus op volgend invoerveld
   Set rs2 = Nothing
End If
End Sub

Private Sub cmdNewRecord_Click()
'nieuw record toevoegen
Dim sql As String, stmp As String
Dim rs2

stmp = InputBox("Landnaam:", "Record toevoegen")
If Trim(stmp) <> "" Then
   sql = "Insert Into country (name,capital,continent,area,population) Values ('" & stmp & "','capital','continent',0,0)"
   Set rs2 = cn.Execute(sql)
   Set rs2 = Nothing
End If
Call RefreshList
End Sub

Private Sub cmdDeleteRecord_Click()
'record verwijderen
Dim sql As String
Dim ix As Integer
Dim rs2

ix = List1.ListIndex
If ix > 0 Then
   If MsgBox("Wis Record '" & List1.List(ix) & "' ?", vbYesNo) = vbYes Then
      sql = "Delete From country Where name='" & List1.List(ix) & "'"
      Set rs2 = cn.Execute(sql)
      Set rs2 = Nothing
   End If
End If
Call RefreshList
End Sub


(http://www.nlcomputerforum.nl/index.php?action=dlattach;topic=1939.0;attach=1080)


Peter
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 19 augustus 2010, 20:23:34
Hoi Peter,
Ik heb dit voorbeeld aangepast met mijn eigen database en tabel om te zien of de listbox wel deed wat het grid zou moeten doen. Ik neem tenminste aan dat dat de bedoeling was van dit voorbeeld. Ik heb een error verbeterd. Set cn = New ADODB.Connection gaf error "user-defined type not defined". Ik heb dit vervangen door Set cn = CreateObject("ADODB.Connection") Ik kreeg ook de fout "Procedure declaration does not match description of event or procedure having the same name",  maar volgens mij is er niets mis met de betreffende procedure Text1_KeyPress(KeyAscii As Integer).
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 19 augustus 2010, 20:26:21
Hoi Peter,
Ik heb dit voorbeeld aangepast met mijn eigen database en tabel om te zien of de listbox wel deed wat het grid zou moeten doen. Ik neem tenminste aan dat dat de bedoeling was van dit voorbeeld. Ik heb een error verbeterd.   Code: [Selecteer] (http://www.nlcomputerforum.nl/javascript:void(0);)Set cn = New ADODB.Connection gaf error "user-defined type not defined". Ik heb dit vervangen door   Code: [Selecteer] (http://www.nlcomputerforum.nl/javascript:void(0);)Set cn = CreateObject("ADODB.Connection") Ik kreeg ook de fout "Procedure declaration does not match description of event or procedure having the same name",  maar volgens mij is er niets mis met de betreffende procedure Text1_KeyPress(KeyAscii As Integer).
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 19 augustus 2010, 21:04:11
Jan,

De bedoeling van dit voorbeeld is aangeven hoe je records leest, bewerkt en wegschrijft.

Citaat
Set cn = New ADODB.Connection gaf error "user-defined type not defined". Ik heb dit vervangen door
Dat mag. Ik had de referentie "Microsoft ActiveX Data Objects 2.8 Library" aangevinkt. Als je dat niet doet, moet je idd CreateObject() gebruiken.

Citaat
maar volgens mij is er niets mis met de betreffende procedure Text1_KeyPress(KeyAscii As Integer).
De 4 Textboxen, allemaal Text1 genaamd, zijn een array van 4 elementen. Waarschijnlijk heb je 4 losse TextBox controls gebruikt; Text1 t/m Text4.
Dat kan ook maar in dit voorbeeld is een array van controls veel handiger.

De procedure Text1_KeyPress(KeyAscii As Integer) moet dus ook zijn Text1_KeyPress(Index As Integer, KeyAscii As Integer)


Peter
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 19 augustus 2010, 22:15:41
Hoi Peter,
Bedankt voor deze uitleg.
Ik had van de textboxen net als jij een control array gemaakt en heb nu de parameterlijst van KeyPress aangepast. Als ik nu klik op een item in de listbox krijg ik de gegevens uit de database in de betreffende textboxen. Er is dus duidelijk iets mis met DBGrid1.
 
 
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 19 augustus 2010, 22:33:25
Citaat
Als ik nu klik op een item in de listbox krijg ik de gegevens uit de database in de betreffende textboxen.
Kun je ze aanpassen en opslaan?


Peter
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 20 augustus 2010, 17:12:20
Hoi Peter,
Ik kan ze niet aanpassen en ook geen nieuwe records toevoegen. Bij toevoegen krijg ik de fout op Symbool "Gegevens komen niet overeen in criteriumexpressie op Symbool". Volgens mij is Symbool bij het aanmaken van tabel DividendenTab ingesteld als string en dat is hij in ADOGrid volgens mij ook.
Als ik alles afsluit en Visual Basic opnieuw opstart en een record probeer toe te voegen via Add-in/Data Manager kan ik in tabel DividendenTab wel symbool invoeren zonder bovenstaande fout te krijgen maar in ContantDividend en de andere velden wordt alleen het decimaalteken geaccepteerd en geen getallen. Als ik het record dan wil updaten krijg ik fout "Data type conversion error".
Vóór werken met ADOGrid (en wellicht ook vóór werken met DBGrid1 kon ik zonder problemen records toevoegen.
Heb je wellicht ook een soortgelijk voorbeeld als ADOGrid om het datatype van de velden van DividendenTab uit te lezen?
 
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 20 augustus 2010, 21:05:40
Citaat
Heb je wellicht ook een soortgelijk voorbeeld als ADOGrid om het datatype van de velden van DividendenTab uit te lezen?
Zoiets,

Plaats een label control (Label3) op je form en via kopieren/plakken maak je er 4 in een array.
Deze functie zet het veld-type om naar tekst:
Private Function GetDataType(DataType As Long) As String
'geef DataType als string terug
Dim txt As String
Select Case DataType
   Case adEmpty:        txt = "(0) No value"
   Case adSmallInt:     txt = "(2) A 2-byte signed integer."
   Case adInteger:      txt = "(3) A 4-byte signed integer."
   Case adSingle:       txt = "(4) A single-precision floating-point value."
   Case adDouble:       txt = "(5) A double-precision floating-point value."
   Case adCurrency:     txt = "(6) A currency value"
   Case adDate:         txt = "(7) The number of days since December 30, 1899 + the fraction of a day."
   Case adBSTR:         txt = "(8) A null-terminated character string."
   Case adIDispatch:    txt = "(9) A pointer to an IDispatch interface on a COM object. Note: Currently not supported by ADO."
   Case adError:        txt = "(10) A 32-bit error code"
   Case adBoolean:      txt = "(11) A boolean value."
   Case adVariant:      txt = "(12) An Automation Variant. Note: Currently not supported by ADO."
   Case adIUnknown:     txt = "(13) A pointer to an IUnknown interface on a COM object. Note: Currently not supported by ADO."
   Case adDecimal:      txt = "(14) An exact numeric value with a fixed precision and scale."
   Case adTinyInt:      txt = "(16) A 1-byte signed integer."
   Case adUnsignedTinyInt:    txt = "(17) A 1-byte unsigned integer."
   Case adUnsignedSmallInt:   txt = "(18) A 2-byte unsigned integer."
   Case adUnsignedInt:        txt = "(19) A 4-byte unsigned integer."
   Case adBigInt:             txt = "(20) An 8-byte signed integer."
   Case adUnsignedBigInt:     txt = "(21) An 8-byte unsigned integer."
   Case adFileTime:           txt = "(64) The number of 100-nanosecond intervals since January 1,1601"
   Case adGUID:               txt = "(72) A globally unique identifier (GUID)"
   Case adBinary:             txt = "(128) A binary value."
   Case adChar:               txt = "(129) A string value."
   Case adWChar:              txt = "(130) A null-terminated Unicode character string."
   Case adNumeric:            txt = "(131) An exact numeric value with a fixed precision and scale."
   Case adUserDefined:        txt = "(132) A user-defined variable."
   Case adDBDate:             txt = "(133) A date value (yyyymmdd)."
   Case adDBTime:             txt = "(134) A time value (hhmmss)."
   Case adDBTimeStamp:        txt = "(135) A date/time stamp (yyyymmddhhmmss plus a fraction in billionths)."
   Case adChapter:            txt = "(136) A 4-byte chapter value that identifies rows in a child rowset"
   Case adPropVariant:        txt = "(138) An Automation PROPVARIANT."
   Case adVarNumeric:         txt = "(139) A numeric value (Parameter object only)."
   Case adVarChar:            txt = "(200) A string value (Parameter object only)."
   Case adLongVarChar:        txt = "(201) A long string value."
   Case adVarWChar:           txt = "(202) A null-terminated Unicode character string."
   Case adLongVarWChar:       txt = "(203) A long null-terminated Unicode string value."
   Case adVarBinary:          txt = "(204) A binary value (Parameter object only)."
   Case adLongVarBinary:      txt = "(205) A long binary value."
   Case adArray:              txt = "(0x2000) A flag value combined with another data type constant. Indicates an array of that other data type."
   Case Else:                 txt = "(" & Str(DataType) & ") Undocumented datatype."
End Select
GetDataType = txt
End Function

Zet dit bij de code in List1_Click():
Label3(0).Caption = GetDataType(rs2("capital").Type)
Label3(1).Caption = GetDataType(rs2("continent").Type)
Label3(2).Caption = GetDataType(rs2("area").Type)
Label3(3).Caption = GetDataType(rs2("population").Type)


Peter
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 22 augustus 2010, 11:17:53
Hoi Peter,
Bedankt voor dit codevoorbeeld.
Kan de oorzaak voor het niet accepteren van input door het grid gelegen zijn in het feit dat ik grid DBGrid gebruik i.p.v. DataGrid? Als dat zo is begrijp ik niet dat in de toepassing waarin het weergeven en updaten wel werkt ook Databound Grid gebruikt wordt en niet DataGrid. 
Of ontbreekt er soms een bepaalde instelling?
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 22 augustus 2010, 12:03:50
Hoi Jan,

Citaat
Of ontbreekt er soms een bepaalde instelling?
Even vereenvoudigen:
Je hebt een project met een formulier waar het wel in werkt.
Dan voeg je een formulier toe.
Je maakt een copy van het control dat wel werkt, plakt dat op het nieuwe formulier, en vervolgens eventueel nog de bijbehorende programmacode kopieert en aanpast op het nieuwe formulier.

Dan ligt het zeker niet aan het control. Het kan dus aan de database liggen.
In het voorbeeld werd met TextBox controls gewerkt. Probeer het daar eerst eens mee. Al is het maar 1 kolom. Het gaat erom of je dan wel de database kun bewerken.


groeten, Peter


Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 22 augustus 2010, 15:47:32
Hoi Peter,
Ik had het over jouw voorbeeld met de textboxen. Daarin werkte wel het in de textboxen plaatsen van de inhoud van de tabel door aanklikken van het betreffende symbool in de ListBox, maar kon ik geen gegevens veranderen of toevoegen. Ik heb de indruk dat dat aan de listbox ligt, want als ik voordat ik dit project opstart gegevens in de tabel probeer te veranderen of records toe te voegen via de Visual Data Manager gaat dat zonder problemen. Probeer ik ditzelfde via commandknop Record toevoegen in het formulier met de data control en de listbox dan lukt dat niet en het lukt evenmin als ik het dan weer, onmiddellijk na gebruiken van de ListBox, probeer via de Visual Data Manager. Het ziet er dus naar uit dat de listbox ergens een lock gezet heeft.
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 22 augustus 2010, 21:21:27
Jan,

Citaat
Daarin werkte wel het in de textboxen plaatsen van de inhoud van de   tabel door aanklikken van het betreffende symbool in de ListBox, maar   kon ik geen gegevens veranderen of toevoegen.
Je hebt wel op de ENTER toets gedrukt om de wijziging te bevestigen?
Krijg je een foutmelding? Zoja, welke?

Citaat
Ik heb de indruk dat dat aan de listbox ligt, want ...
Die redenatie snap ik niet. De listbox wordt netjes gevuld, want je ziet de velden van het record dat je aanklikt in de listbox.
Een record toevoegen heeft niets meer met de listbox te maken. Alleen hoe de variabele CN gekoppeld is aan de database (read/write mode, met of zonder wachtwoord en dergelijke) of de juiste SQL commando bepalen of een record toegevoegd kan worden.

Citaat
Het ziet er dus naar uit dat de listbox ergens een lock gezet heeft.
Mogelijk heeft de code in Form_load de database als readonly gezet.
Vervang daar de code eens in:
cn.Provider = "Microsoft.Jet.OLEDB.4.0"
cn.Mode = adModeReadWrite
cn.Open App.Path & "\database\portef1.mdb"

Op deze site (http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=64111&lngWId=1) staat een .ZIP bestand met daarin een goed uitleg hoe je het DataGrid control kunt gebruiken.


Al met al blijf ik me toch afvragen of het niet verstandiger is de database om te zetten naar een andere structuur.


groeten, Peter
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 25 augustus 2010, 18:20:04
Hoi Peter,
Het deleten van records werkt goed en het toevoegen van nieuwe records waarschijnlijk ook, maar ik krijg daarbij de fout dat de datattpen niet overeenstemmen.
Om er achter te komen wat de datatypen zijn om zo te weten hoe ik de in houd van de textboxen moet converteren heb ik de volgende code gemaakt. 
Private Sub Command1_Click()
Dim adoConnection As ADODB.Connection
Dim adoRSFields As ADODB.Recordset
Dim sConnection As String
Set adoConnection = New DODB.Connection
sConnection = "Provider=Microsoft.Jet.OLEDB.3.51;Data _ Source=N:\Program Files\Microsoft Visual _ Studio\Prive\Beleggen\DATABASE\portef1.mdb\DividendenTab"
adoConnection.Open sConnection
Set adoRSFields = adoConnection.OpenSchema _(adSchemaProviderTypes)
Do Until adoRSFields.EOF   
Debug.Print "Data Type:" & adoRSFields!TYPE_NAME _    & vbTab & "Columns Size: " & adoRSFields! _ COLUMN_SIZE   
adoRSFields.MoveNext
Loop
Set adoRSFields = Nothing
adoConnection.Close
Set adoConnection = Nothing
End Sub
maar ik krijg dan op sConnection = de fout "Can't open a database created witha previous version of your application". Dit komt mij onwaarschijnlijk voor, want de databasetabel is bij mijn weten aangemaakt met Visual Data Manager van VB 6.0.
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 25 augustus 2010, 21:08:53
Hoi Peter,
Dat grid-voorbeeld is inderdaad heel goed en is erg duidelijk.
Bedankt, ik zal het zeker gebruiken.
Hoe kan ik eventueel de structuur van de database aanpassen? Ik zou niet weten welke versie hij is. Omzetten via Microsoft Office Access heb ik al eens eerder geprobeerd, maar dat leverde problemen op. De betreffende bestanden waren door Visual Basic 6.0 niet te lezen.
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 25 augustus 2010, 22:34:20
Hoi Jan,

Citaat
Ik zou niet weten welke versie hij is.
Met behulp van onderstaande code kan je dat opvragen.
Plaats een commandbutton (cmdGetVersion) op je formulier en deze code:
Private Sub cmdGetVersion_Click()
Dim sfile As String
Dim txt As String

sfile = App.Path & "\database\portef1.mdb"
txt = GetVersion(sfile)
If txt <> "" Then MsgBox txt
End Sub

Function GetVersion(strDbPath As String) As String
'Geef van meegegeven bestand het versienummer van ACCESS en JET terug
Dim dbs As Database
Dim strAccVersion As String, strJetVersion As String
Dim txt As String

Const conPropertyNotFound As Integer = 3270

On Error GoTo Err_GetVersion

'Open the database and return a reference to it.
Set dbs = OpenDatabase(strDbPath)

'Check the value of the AccessVersion and Version property.
strAccVersion = dbs.Properties("AccessVersion")
strJetVersion = dbs.Properties("Version")

'Strip the two leftmost digits
strAccVersion = Left(strAccVersion, 2)

'Based on the value of the AccessVersion property,
'return a string indicating the version of Microsoft Access
'used to create or open the database.
Select Case strAccVersion
   Case "02":  txt = "2.0"
   Case "06":  txt = "95"
   Case "07":  txt = "97"
   Case "08":  txt = "2000"
   Case "09":  txt = "2002"
   Case Else:  txt = "[" & strAccVersion & "]"
End Select
GetVersion = "Access " & txt & " , JET " & strJetVersion

Exit_GetVersion:
   On Error Resume Next
   dbs.Close
   Set dbs = Nothing
   Exit Function

Err_GetVersion:
   If Err.Number = conPropertyNotFound Then
      MsgBox "Property not Found."
   Else
      MsgBox "Error: " & Err & vbCrLf & Err.Description
   End If
   Resume Exit_GetVersion
End Function


Peter
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 26 augustus 2010, 17:01:32
Hoi Peter,
Bedankt voor deze code. Ik krijg er de volgende fout mee: "Property not found"  op strAccVersion = dbs.Properties("AccessVersion") Ik heb me inmiddels wat meer verdiept in ADO en heb daarbij in de VB-literatuur ontdekt, dat ADO alle vorige versies zonder problemen aan zou moeten kunnen en dat conversie naar een latere versie niet nodig zou moeten zijn. Wat is jouw ervaring hiermee? 
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 26 augustus 2010, 19:40:58
Hoi Jan,

Citaat
Ik krijg er de volgende fout mee: "Property not found"  op
Is het wel een echt Microsoft Access database of heb je de extensie .mdb misbruikt?

Citaat
Wat is jouw ervaring hiermee?
Nul.


Peter
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 26 augustus 2010, 20:16:05
Hoi Peter,
Het is gegarandeerd een Access-database. Ik beschik over geen andere databases.
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 26 augustus 2010, 20:31:59
Jan,

Citaat
Het is gegarandeerd een Access-database.
Vreemd. Kun je dat bestand dan eens sturen voor onderzoek, eventueel via een prive-bericht.


Peter
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 26 augustus 2010, 21:06:20
Hoi Peter,
Als ik in strAccVersion = dbs.Properties("AccessVersion") van "AccessVersion" "Version" maak gaat het wel zonder fout. Ik krijg dan dat het een Access 2.0 Jet 2.0 is. Het databasebestand kun je natuurlijk krijgen als dat nog nodig is.
 
 
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 26 augustus 2010, 21:27:56
Hoi Jan,

Citaat
"AccessVersion" "Version"
Dat zijn 2 verschillende properties zoals je ook kan zien in de programmacode. In ieder geval is het dan een erg oude  JET 2.0 database engine, uit pakweg 1993 !

Dat bestand mag je sturen.


Peter
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 26 augustus 2010, 22:13:34
Hoi Peter,
Ik heb er ook een Access 3.0 versie bij. Het valt op dat de Access-versie en de Jet-versie gelijk zijn. Is dat toeval of hoort dat zo?
Kan het zijn dat dit komt omdat ik van Accessversion Version
gemaakt heb. Dit is nl. hetzelfde als strJetVersion .
Ik wil het bestand wel opsturen, maar het forum weigert het bestand. Hoe kan ik het versturen? 
 
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 26 augustus 2010, 22:39:55
Jan,

Stuur het dan maar via de mail.


Peter
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 27 augustus 2010, 01:28:08
Peter,
Wat is het emailadres?
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Ronald op 28 augustus 2010, 15:41:54
Beste Jan,

Ik wil het bestand wel opsturen, maar het forum weigert het bestand. Hoe kan ik het versturen? 
Ik weet niet wat voor extensie dat bestand heeft, maar sowieso als je er een .zip bestand van maakt, zal het zeker lukken om het wél in een Forumbericht te plaatsen. :)

Groeten,

Ronald
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 30 augustus 2010, 14:25:40
Hoi Ronald,
Bedankt voor deze tip.
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 30 augustus 2010, 14:57:00
Hoi Ronald,
Het lukt ook niet met een zipbestand. Als ik de extensie veranderen van zipx in rar vermeldt hij het bestand als attachment toch als winzip-bestand en weigert het te verzenden. 
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Ronald op 30 augustus 2010, 20:44:29
Hoi Jan,

.zipx is inderdaad niet toegestaan (ik had trouwens nog nooit van die extensie gehoord), een .zip bestand kan wel. Maar alleen als bijlage bij een Forumbericht. Bijlagen bij een privé-bericht zijn niet mogelijk.

Je kunt het bestand ook mailen naar info apenstaartje nlcomputerforum punt nl  (dan zet ik het wel ergens voor je neer) :)

Groeten,

Ronald
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 31 augustus 2010, 17:45:13
Hoi Peter,
Het heeft wat moeite gekost, maar hier is dan eindelijk het databasebestand.
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 31 augustus 2010, 22:40:10
Hoi Jan,

Citaat
Het heeft wat moeite gekost, maar hier is dan eindelijk het databasebestand.
Er is iets vreemds met dat portef1.mdb aan de hand:
a) Het is nogal groot: ongeveer 160MB terwijl als ik het met Access2000 bekijk er maar 2 kleine tabellen inzitten.
b) Het heeft de JET 2.0 Engine in zich terwijl er ook Access2000 en Access2007 eigenschappen in staan. Mogelijk dat je zelf die eigenschappen toegevoegd hebt maar dat lijkt me onwaarschijnlijk.
JET 2.0 is iets uit de jaren 1993-1995 !!

Klopt het dat die database maar 2 tabellen bevat?
Ik zal eens wat testen met dat bestand maar dat wordt wat later deze week.


Wordt vervolgd, Peter

Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 1 september 2010, 13:09:24
Hoi Peter,
Dat het bestand zo groot is komt waarschijnlijk omdat ik het niet gecomprimeerd heb en er indertijd meer gegevens in hebben gezeten. De toevoegingen die je signaleert heb ik er niet bewust aan toegevoegd. De database zelf dateert inderdaad uit het begin van de jaren negentig, maar de tabellen zijn later toegevoegd onder VB 6.0. Deze database bevat niet zoveel data, dus het zou niet al te veel werk zijn om de hele database opnieuw te maken onder VB 6.0. We komen er dan achter of het niet tonen van de opgehaalde gegevens uit de tabel in het grid door de database veroorzaakt wordt.
Als je wat tests wilt uitvoeren op de database, graag. Dat je daar niet meteen tijd voor hebt is geen probleem.
Tot slot kan ik je melden dat ik de toepassing in de tutorial met het data grid gemaakt heb en dat ook deze de gegevens niet laat zien.
Als je geïnteresseerd bent, kan ik je die toepassing gezipt toesturen.
Wat ik nog uitproberen wil is deze grid-applicate toepassen op de voorbeeld databases van VB 6.0. Als deze wel lukken, dan is de database inderdaad de oorzaak.
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 4 september 2010, 22:27:07
Hallo Jan,

Citaat
Ik zal eens wat testen met dat bestand maar dat wordt wat later deze week.
De resultaten van het testen met je bestand portef1.mdb:
Zowel met een DBGrid control als met een ADODB koppeling kan ik lezen en schrijven in je database.
Dat betekend dus dat er met de database niets mis is.
Het lukt jouw niet met de voorbeeldcode.
Dan blijft er m.i. maar 1 ding over en dat is een ontbrekende of verminkte koppeling ergens in Windows.
Welke versie van het bestand %systemroot%\system32\msjet40.dll heb je?
(%systemroot% is normaal c:\windows)
Is MS Access op dezelfde computer geinstalleerd? Zoja, welke versie?


groeten, Peter
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 5 september 2010, 01:11:14
Hoi Peter,
Heel erg bedankt voor het testen van de database. Dat er met het databasebestand niets mis is, daar was ik inmiddels ook achter gekomen. Immers, met een geheel nieuw onder ADO gemaakte identieke database lukte het ook niet om de gegevens zichtbaar en updatebaar te maken. De versie van msjet40.dll is 4.0.9511.0.
MS Access is op dezelfde computer geïnstalleerd en is onderdeel van Microsoft Office 2003. Er heeft ook nog een tijdje Office 2007 op deze computer gestaan, maar die versie beviel me niet en heb ik dus verwijderd. Misschien een mogelijke oorzaak en niet helemaal verwijderd door het uninstallen?
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 5 september 2010, 01:33:36
Hoi Jan,

Citaat
De versie van msjet40.dll is 4.0.9511.0.
Die heb ik ook.
Heb je Access 2003 opnieuw geinstalleerd nadat je Access 2007 verwijdert hebt?


groeten, Peter
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 5 september 2010, 09:24:02
Hoi Peter,
Die heb ik inderdaad na verwijderen van versie 2007 opnieuw geïnstalleerd. Er staat in de map System32 van Windows nog een andere dll met msjet, namelijk msjetoledb met versie 4.0.9502.0. 
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 5 september 2010, 20:51:40
Hoi Jan,

Er zijn meer bestanden die hiervoor gebruikt worden. Voor een volledige lijst en updates , kijk eens op
http://support.microsoft.com/kb/239114/ (http://support.microsoft.com/kb/239114/)


Peter
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 6 september 2010, 15:42:19
Hoi Peter,
Ik heb het bestand van de link die je geeft uitgeprint en zal die bekijken. Als het probleem niet in de VB-code opgelost kan worden is het logisch de fout in  de bestanden waarvan VB gebruik maakt te zoeken. Dat het probleem daar ligt, betwijfel ik echter. Zoals je gezien zult hebben bevat de database portef1.mdb ook nog een tabel PortefeuilleTab. Ook deze gebruikt DBGrid en deze geeft de gegevens wel correct weer in het grid en de gegevens zijn ook updatebaar.
Als tabel DividendenTab iets zou missen, zou PortefeuileTab dat ook moeten doen. Vandaar dat ik eerder voor DivdendenTab een kopie van PortefeuilleTab heb gebruikt en de code heb aangepast. Ondanks dat werkt DividendenTab niet correct met het grid.
Ik wil eens proberen als Provider Microsoft.Jet.OLEDB.2.0 te gebruiken en het DataGrid en de data control van ADO weer terug te vervangen door DBGrid1en de data control van DAO
3.51. Ik moet dan waarschijnlijk ook DAO3.51 aanvinken in Project/References.
 
 
groeten,
Jan
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 6 september 2010, 19:15:01
Hoi Jan,

Citaat
Ik wil eens proberen als Code: [Selecteer] (http://www.nlcomputerforum.nl/javascript:void(0);)Provider Microsoft.Jet.OLEDB.2.0  te gebruiken
Dat werkt alleen als je ook JET 2.0 geinstalleerd hebt!

Citaat
Zoals je gezien zult hebben bevat de database portef1.mdb ook nog een   tabel PortefeuilleTab. Ook deze gebruikt DBGrid en deze geeft de   gegevens wel correct weer in het grid en de gegevens zijn ook   updatebaar.
Tja, dat is inderdaad vreemd. En je weet zeker dat de DBGrid en Data control mbt DividendenTab goed ingesteld staan:
Data1.Connect = Access 2000
Data1.DefaultType = Use Jet
Data1.Exclusive = False
Data1.Options = 0
Data1.ReadOnly = False
Data1.RecordSet = DynaSet
DBGrid.AllowUpdate = True
(dit zijn de standaard waardes)


Peter
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 7 september 2010, 13:39:15
Hoi Peter,
Ik heb al deze instellingen gecontroleerd en deze stemmen alle overeen met wat je opgeeft.
Ik heb je artikel over het meest recente servicepack voor de MS Jet 4.0 database-engine gelezen. Zou het zin hebben het meest recente servicepack te installeren? Jij hebt dezelfde versie van msjet40.ddl als ik en bij jou doet het grid het wel, dus ik vrees dat installeren van dat servicepack voor ons doel niet veel zal opleveren. Maar je kunt nooit weten. Als ik het servicepack verwijder, is dan de oorspronkelijke toestand volledig hersteld of komen er dan moeilijke toestanden?
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 7 september 2010, 21:15:03
Hoi Jan,

Deze service-pack update verandert niet alleen bestanden maar ook register-instellingen. Aangezien je bestanden zo te lezen in uptodate zijn, kan het dus ook aan de register-instellingen liggen. In hoeverre je dat weer ongedaan kunt maken kan ik niet zeggen.
Ik denk dat het beter is om eerst wat register-instellingen te vergelijken.
Klik op Start - Uitvoeren
Typ REGEDIT en klik op OK.
(Let op, verander geen instellingen!)
Blader in de linker kolom naar HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet
Rechtsklik op deze subsleutel en klik op Exporteren
Geef de bestandsnaam JET.TXT in en klik op Opslaan (dus niet opslaan als .REG)
Sluit Regedit af.

Voeg dit bestand als bijlage toe aan een bericht.


Peter
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 8 september 2010, 11:40:03
Hoi Peter,
Onder de sleutel ......... SOFTWARE komt Jet niet voor. Als ik 'Zoeken' aanklik voor Jet krijg ik de tekst "Microsoft JET.OLEDB3.51".
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 8 september 2010, 21:02:25
Jan,

Citaat
Onder de sleutel ......... SOFTWARE komt Jet niet voor.
Dat klopt. Je moet eerst nog de subsleutel Microsoft openen!
Hier nogmaals de volledige sleutelreeks:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet

Citaat
Als ik 'Zoeken' aanklik voor Jet krijg ik de tekst "Microsoft JET.OLEDB3.51".
Dat kan. Waarschijnlijk staat ie dan op de sleutel HKEY_CLASSES_ROOT\.jod
Dit is normaal.


Peter
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 9 september 2010, 18:21:12
Hoi Peter,
In de betreffende sleutel bevat Jet de onderdelen 3.0, 3.5 en 4.0.
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 9 september 2010, 21:18:29
Hoi Jan,

Citaat
In de betreffende sleutel bevat Jet de onderdelen 3.0, 3.5 en 4.0.
Ja dat kan, maar ik wil alle subsleutels en waardes daarvan zien.
Voer dus aub de instructies uit in bericht #75.


Peter
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 10 september 2010, 13:58:31
Hoi Peter,
Ik heb Jet geselecteerd en afgedrukt naar een bestand, maar dat geeft een soort objectcode en is dus onleesbaar. Als ik het afdruk naar de printer krijg ik keurig de tekst (71 bldz.). Hoe komt dat?
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 10 september 2010, 20:35:31
Jan,

Citaat
Ik heb Jet geselecteerd en afgedrukt naar een bestand,
Afgedrukt naar een bestand?
Vul het venster Registerbestand exporteren als volgt in:
(http://www.nlcomputerforum.nl/index.php?action=dlattach;topic=1939.0;attach=1143)

Klik dan op Opslaan


Peter
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 11 september 2010, 17:38:57
Hoi Peter,
Hier het gezipte Jet-register.
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 11 september 2010, 19:59:58
Jan,

Pas deze instelling in het register eens aan:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines]
SandBoxMode = 2

Herstart de computer.
Probeer daarna nog eens je VB6 programma.

Er staan ook een aantal verwijzingen naar station F:\
Is dat een andere schijf, partitie of een netwerkmap?
Heb je op F: het office pakket geinstalleerd?

Scheelt dit?

Peter
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 12 september 2010, 13:03:24
Hoi Peter,
Veranderen van Sandbox Mode van 3 in 2 heeft niet geholpen. Ik heb inderdaad Microsoft Office op partitie F geïnstalleerd.
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 20 september 2010, 13:18:55
Hoi Peter,
Zou het helpen om met een cursor te werken om dit probleem op te lossen?
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 20 september 2010, 19:38:23
Hoi Jan,

Wat bedoel je met "met een cursor te werken" ?


Peter
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 21 september 2010, 18:03:41
Hoi Peter,
In ADO kun je werken met een zogenaamde cursor. Je hebt daarbij de volgende opties:
CursorType = adOpenDynamic    ' zonder beperkingen door de recordset bewegen
CursorType = adOpenKeyset      ' als dynamic cursor, maar je kunt nu ook       
' de  veranderingen van andere gebruikers bekijken
CursorType = adOpenForwardOnly       'spreekt voor zich
CursorType = adOpenStatic       ' als dynamic, maar zonder de veranderingen van andere gebruikers te kunnen lezen.
Met de cursor kun je door de recordset bewegen op CursorType manier.
Ik dacht, als je met de cursor werkt moet hij als dat niet gaat een fout geven waarom het niet gaat. Misschien werkt het zo niet, maar het zou me logisch lijken.
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 21 september 2010, 20:36:43
Hoi Jan,

Je kunt altijd proberen of dit voor jou werkt.
Als ik hier een ADO query uitvoer, is .CursorType = 0 en .LockType = 1.
De waardes kan ik trouwens niet wijzigen.


Peter



Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 18 december 2010, 17:59:22
Omdat het hier behandelde probleem ook met deskundige hulp niet opgelost kon worden heeft de door Peter gegeven codevoorbeelden mij duidelijk gemaakt dat ik kennelijk onvoldoende kennis had van het databasegedeelte van Visual Basic 6.0. De overgang van VB 5.0 naar 6.0 ging zo probleemloos, dat ik ook nooit naar extra informatie gezocht heb. Ook het ontbreken van Microsoft systeemdocumentatie over VB 6.0 was daar debet aan. Ik heb inmiddels mijn kennis van ADO uitgebreid en heb de oorzaak van alle problemen gevonden. Het vullen van het grid lukte aanvankelijk met drie tabellen en na overgang van een geleende versie van MicrosoftVisual Studio 6.0 Enterprise editie naar een nieuwe aangeschafte Pro versie van Microsoft Visual Studio 6.0 werkte er twee toepassingen nog wel en de derde niet. In de ToolBox zag ik alleen maar de oudere versie van de data control en deze gebruikte ik nog steeds, maar de code die Peter mij gaf werkte daar niet voor. Doordat ik op een geven moment een foutmelding kreeg dat er geen compatible data source voor dit control was en ik een ADO data control of DataEnvironment aan het project moest toevoegen, ondanks dat de ADO data control aangevinkt was in Project/Components, ben ik verder gaan zoeken en dat bracht aan het licht dat de ADO data control net in het niet-zichtbare gedeelte van de ToolBox viel. Ik had dus steeds de verkeerde data control op het formulier. Waarom de oude databound versie met de VB5 data control plotseling in 2 gevallen nog werkte en in het derde geval niet is mij nog steeds een raadsel. Mogelijk heeft het te maken met de overgang van Enterprise naar Pro versie.
Overigens idereen bedankt voor de ontvangen hulp. Vooral Peter heeft daarin een groot aandeel gehad.
 
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: Peter op 18 december 2010, 22:04:45
Hoi Jan,

Citaat
ben ik verder gaan zoeken en dat bracht aan het licht dat de ADO data control net in het niet-zichtbare gedeelte van de ToolBox viel. Ik had dus steeds de verkeerde data control op het formulier.
Dat verklaart een hoop. De oudere control zal een aantal dingen niet kunnen to.v een nieuwere versie. Wat er precies gewijzigd is is helaas nooit helemaal duidelijk.
Dat je beide control-versies in 1 project kunt gebruiken is al helemaal verwarrend.

In ieder geval is dit probleem nu dus opgelost door de nieuwste control te gebruiken.
Bedankt voor de feedback.


groeten, Peter
Titel: Re: DBGrid1 toont kolommen zonder inhoud, maar accepteert geen invoer
Bericht door: jvdpeet † op 21 december 2010, 17:50:47
Hoi Peter,
Waarschijnlijk zal ik de andere twee onderdelen, die de oude data control gebruiken, in de naaste toekomst ook vervangen door de ADO data control. Hoe uniformer, hoe beter. Ik wil dat niet meteen doen, want ik hoop er toch nog eens achter te komen, waarom er 2 onderdelen met precies dezelfde systematiek, maar met een andere tabel niet werken met de oude data control en de eerste wel. Deze eerste tabel is eerder gemmaakt dan de andere twee en dat is dan ook waarschijnlijk de reden dat hij wel werkt. Maar ik dacht dat de database bepalend was en niet de tabellen daarvan. Maar kennelijk reageert VB op de onderdelen van een database.