[VB] Applicatie draait niet op andere pc

Pagina: 1
Acties:

  • Uiligheid
  • Registratie: December 2000
  • Laatst online: 13-04 15:17

Uiligheid

alle gekheid op een stokje

Topicstarter
Het probleem is als volgt:

Ik heb een executable gemaakt die een tweetal tekstbestanden importeert in een acces database. Hiervoor gebruik ik de volgende code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
strConnection = "Driver={Microsoft Text Driver (*.txt; *.csv)}" & ";" & _
                "DBQ=" & App.Path & ";" & _
                "DefaultDir=" & App.Path & ";" & _
                "Uid=Admin;Pwd=;"

Set adoConnection = New ADODB.Connection
adoConnection.Open strConnection

'Verwijderen bestaande data tblData
strSQL = "DELETE FROM [tblData] IN '" & App.Path & "\dbData.mdb" & "'"
adoConnection.Execute strSQL
'Importeren nieuwe data tblData
strSQL = "INSERT INTO [tblData] IN '" & App.Path & "\dbData.mdb'"
strSQL = strSQL & "SELECT * FROM Waarde.txt"

adoConnection.Execute strSQL


Dit doe ik dus nog een keer met een ander tekstbestand. Nu werkt dit op mijn pc prima, maar op een andere pc niet. Dat is nogal vervelend, aangezien ik het niet voor mijzelf maak. :(

Als ik het op een andere pc uitvoer krijg ik de volgende fout:

Afbeeldingslocatie: http://home.student.utwente.nl/s.eilander/temp/fout.jpg

Iemand die hier ervaring mee heeft, of mij een oplossing kan geven?

Ceterum censeo Carthaginem esse delendam


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:08

gorgi_19

Kruimeltjes zijn weer op :9

Weliswaar geen VB, maar fout is hetzelfde

Daarnaast is
SQL:
1
INSERT INTO [tblData] IN

afaik geen geldige syntax.

Zie ook: http://www.w3schools.com/sql/sql_insert.asp

[ Voor 46% gewijzigd door gorgi_19 op 01-12-2003 11:14 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:14
Print je SQL INSERT statement eens naar het scherm, en kijk eens wat er aan scheelt.

Het aantal velden dat je wilt inserten is nl. ongelijk aan het aantal velden dat je gespecifieert hebt.

Het is dan ook veel veiliger dat je zelf expliciet in je query aangeeft welke velden je wilt gaan inserten.

Schrijf die query dus zo:
code:
1
2
3
INSERT INTO mijntabel (veld1, veld2, veld3)
SELECT veld1, veld2, veld3
FROM andere_tabel


Ik vind je SQL statement anders wel behoorlijk vaag. Waarom ga je daar de bestandsnaam van je DB bv. gaan meegeven? :?

Owja, de reden waarom het op de ene PC wel werkt, en op de andere niet, kan te maken hebben met het feit dat je waarschijnlijk verschillende versies van de MDAC componenten hebt.
Maar ik zou zowiezo m'n insert - query anders schrijven.

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:08

gorgi_19

Kruimeltjes zijn weer op :9

.

[ Voor 100% gewijzigd door gorgi_19 op 01-12-2003 11:17 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Uiligheid
  • Registratie: December 2000
  • Laatst online: 13-04 15:17

Uiligheid

alle gekheid op een stokje

Topicstarter
Ik snap inderdaad wat de foutmelding bedoelt. Dat is redelijk logisch. Punt is echter dat ik dat ook niet doe, ik lees een tekstbestand in, dat door ';' 's is gescheiden en die waarden voert hij in.

Die format voor tabelnaam werkt wel. Ik ben er ook in principe niet mee bekend,maar dit is rechtstreeks gecopy-paste uit een tutorial over het pompen van data via verschillende manieren.

Ceterum censeo Carthaginem esse delendam


  • Uiligheid
  • Registratie: December 2000
  • Laatst online: 13-04 15:17

Uiligheid

alle gekheid op een stokje

Topicstarter
whoami schreef op 01 december 2003 @ 11:15:
Print je SQL INSERT statement eens naar het scherm, en kijk eens wat er aan scheelt.

Het aantal velden dat je wilt inserten is nl. ongelijk aan het aantal velden dat je gespecifieert hebt.

Het is dan ook veel veiliger dat je zelf expliciet in je query aangeeft welke velden je wilt gaan inserten.

Schrijf die query dus zo:
code:
1
2
3
INSERT INTO mijntabel (veld1, veld2, veld3)
SELECT veld1, veld2, veld3
FROM andere_tabel
Deze redenering klopt ook wel, maar aangezien het een tekstbestand is, heb ik het op deze manier gedaan, zonder veldnamen. Maar het klopt wel, en hij doet het hier ook gewoon goed.
Ik vind je SQL statement anders wel behoorlijk vaag. Waarom ga je daar de bestandsnaam van je DB bv. gaan meegeven? :?
Dit doe ik omdat ik geen access driver gebruik of een ADO of DAO gebruik waarmee ik naar Access kan, nu ik die database naam meegeef, gaat dat wel goed.
Owja, de reden waarom het op de ene PC wel werkt, en op de andere niet, kan te maken hebben met het feit dat je waarschijnlijk verschillende versies van de MDAC componenten hebt.
Maar ik zou zowiezo m'n insert - query anders schrijven.
hmmz.. kan ik daar gewoon nieuwe versies van downloaden bij MS?

Ceterum censeo Carthaginem esse delendam


  • Uiligheid
  • Registratie: December 2000
  • Laatst online: 13-04 15:17

Uiligheid

alle gekheid op een stokje

Topicstarter
MDAC heb ik al gevonden, ben ik aan het proberen nu.

/edit:

was niet de oplossing..

[ Voor 27% gewijzigd door Uiligheid op 01-12-2003 11:42 ]

Ceterum censeo Carthaginem esse delendam


  • Lister
  • Registratie: September 2001
  • Laatst online: 15-02-2022
Het kan ook in je regional settings zitten.
Als bijvoorbeeld je list-separator geen ";" is op die tweede machine dan wordt de text niet meer zo opgesplitst als je zou verwachten en dan krijg je zo'n soort foutmelding dat het aantal velden niet overeenkomt.

Als je er getallen in hebt staan kan dat het ook veroorzaken als je een andere decimal separator hebt.
"4,5" wordt dan bijvoorbeeld als 2 velden "4" en "5" gezien in plaats van 1 veld "4,5"

  • Uiligheid
  • Registratie: December 2000
  • Laatst online: 13-04 15:17

Uiligheid

alle gekheid op een stokje

Topicstarter
Goed,

Ik heb hem even opnieuw gebouwd, aangezien ik echt niet kon vinden waar het nou precies aan lag. Ik werk nu met ado's en die ado's pompen de data uit een txt file naar de acces mdb.

Dit gaat met de volgende code:

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
28
29
30
31
32
33
34
35
36
37
38
39
40
'need to use the Microsoft Access driver to build updateable RecordSet for Output table.
strCnOutput = "Driver={Microsoft Access Driver (*.mdb)};" & _
                       "Dbq=" & App.Path & "\dbDSB.mdb;" & _
                       "DefaultDir=" & App.Path & ";" & _
                       "Uid=Admin;Pwd=;"

Set adocnoutput = New ADODB.Connection
adocnoutput.Open strCnOutput

'need to use the Text ISAM driver to read file.
strCnInput = "Driver={Microsoft Text Driver (*.txt; *.csv)}" & ";" & _
                "DBQ=" & App.Path & ";" & _
                "DefaultDir=" & App.Path & ";" & _
                "Uid=Admin;Pwd=;"
                
Set adocninput = New ADODB.Connection
adocninput.Open strCnInput

strSQL = "DELETE * FROM tblTabel"
adocnoutput.Execute strSQL

Set adoRsInput = New ADODB.Recordset
adoRsInput.Open "SELECT * FROM [Waarde#txt]", adocninput, adOpenStatic, adLockReadOnly, adCmdText

Set adoRsOutput = New ADODB.Recordset
adoRsOutput.Open "SELECT * FROM tblTabel", adocnoutput, adOpenDynamic, adLockOptimistic, adCmdText

While Not adoRsInput.EOF
    i = 0
    adoRsOutput.AddNew
    For Each adoFld In adoRsInput.Fields
        adoRsOutput.Fields(i).Value = adoFld.Value
        i = i + 1
    Next
    adoRsOutput.Update
    adoRsInput.MoveNext
Wend

adoRsOutput.Close
adoRsInput.Close


Nu is het zo dat het weer op mijn pc wel werkt, maar op een andere niet. Deze geeft een type mismatch. Dit komt blijkbaar doordat hij de punt-komma gescheiden waarden niet scheidt, waardoor alle data in het eerste veld komt. Hierdoor krijgt hij een type mismatch op het tweede veld.

Nu heb ik al gekeken naar de regional settings en deze staan gelijk op beide pc's ook de laatste versie van MDAC geinstalleerd. Nu heb ik eigenlijk niet zo'n idee meer waar het aan kan liggen, iemand hier?

Daarnaast is dit ook nog vrij processorintensief, waar ik liever wat vanaf snoep, maar dat is van secundair belang. Ik heb daar nog wel wat ideetjes voor (recordset direct kopieren en updaten) maar suggesties zijn zeker welkom!

Ceterum censeo Carthaginem esse delendam


  • Uiligheid
  • Registratie: December 2000
  • Laatst online: 13-04 15:17

Uiligheid

alle gekheid op een stokje

Topicstarter
Goed, ik heb nog een x aantal manieren geprobeerd (van ADO tot RDO tot Fileimport, enz)

Maar ik krijg niet voor elkaar dat een pc (behalve mijn eigen) snapt dat het door semi-colons wordt gescheiden. Alle velden met semi-colons worden netjes in de eerste kolom gegooid.

Volgens mij moet de oplossing simpel zijn, er moet ergens te bepalen zijn wat de delimiter moet zijn, ik kan er alleen niet bij/ niet vinden!!!

Ceterum censeo Carthaginem esse delendam


  • Lister
  • Registratie: September 2001
  • Laatst online: 15-02-2022
Ik heb even lopen zoeken en ben de volgende link tegengekomen:

ACC: How to Use Schema.ini for Accessing Text Data
http://support.microsoft....9/0/90.asp&NoWebContent=1

Het gaat wel over DAO en niet ADO maar misschien dat je er even goed wat aan hebt. Het lijkt erop dat je in dezelfde directory als de textfile een Schema.INI file moet aanmaken met daarin de opbouw van een record.

En hier staat dan weer omschreven hoe zo'n Schema.ini file eruit moet zien:
http://msdn.microsoft.com...dbc/htm/odbcjetsdk_98.asp

Edit:
Dit blijkt functionaliteit van de ISAM driver te zijn dus onder ADO zou het ook moeten werken?!

[ Voor 10% gewijzigd door Lister op 05-12-2003 17:14 ]


  • Remco
  • Registratie: Januari 2001
  • Laatst online: 15:56
Uiligheid schreef op 04 december 2003 @ 02:54:
Goed, ik heb nog een x aantal manieren geprobeerd (van ADO tot RDO tot Fileimport, enz)

Maar ik krijg niet voor elkaar dat een pc (behalve mijn eigen) snapt dat het door semi-colons wordt gescheiden. Alle velden met semi-colons worden netjes in de eerste kolom gegooid.

Volgens mij moet de oplossing simpel zijn, er moet ergens te bepalen zijn wat de delimiter moet zijn, ik kan er alleen niet bij/ niet vinden!!!
Je kan met input gewoon de laten " separeren"

input(1)
1 = filenaam

inputline(1)
geeft de hele lijn tot aan een enter

input herkent automagisch separatie.

The best thing about UDP jokes is that I don't care if you get them or not.


  • Uiligheid
  • Registratie: December 2000
  • Laatst online: 13-04 15:17

Uiligheid

alle gekheid op een stokje

Topicstarter
Goed, blijf het raar vinden dat hij het nog steeds niet op die andere manier doet, aangezien dat een stuk sneller gaat met meteen het inserten van een hele db. Ik loop nu record voor record door om toe te voegen.

Hij doet het nu wel lekker met een Schema.ini

Bedankt ! _/-\o_

Ceterum censeo Carthaginem esse delendam

Pagina: 1