Toon posts:

[VB] Fout in code, maar wat ?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Een goedendag allen,

Ik heb dus een stukkie code gemaakt (met iemand die verstand heeft van VB) uiteindelijk kwamen we dus op een punt dat als je een naam in voert die een ' (als in : "van 't slot") bevat dat de invoerregel aanpast wordt, dus daarom een replace functie toegepast..

Alleen blijft tie een fout aangeven, zou iemand me kunnen vertellen wat de goede zin zou moeten zijn?


UsedSQL = UsedSQL & "Naam_en_voorletters='" & Replace(RsMain("Naam_en_voorletters").Value, "'", "''") & "',"


Ongelooflijk bedankt alvast,
Een waarderend tweakertje ... ;)

Verwijderd

Dit hoort niet echt in SA volgens mij.. :)

  • NielsNL
  • Registratie: Januari 2002
  • Laatst online: 01-09 11:47

NielsNL

DigiCow

Neej, dit is voor P&W.
Wat geeft ie nu voor fout dan?

M'n Oma is een site aan het haken.


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 23:27

mulder

ik spuug op het trottoir

een fout? wat voor een fout!

oogjes open, snaveltjes dicht


  • OProg
  • Registratie: Juli 2001
  • Laatst online: 06-01-2022

OProg

Molletje

[SA] --> [P&W] :)

Verwijderd

Dit is de waarde van de string als je "van 't slot" invoert:
code:
1
Naam_en_voorletters='van ''t slot',

Met al die qoutes begrijpt VB het niet meer...
Tip, probeer de waarde te beginnen en te eindigen met een dubbele qoute, zodat er uiteindelijk komt te staan: ="van 't slot"
Of zorg ervoor dat de ' in "van 't slot" wordt vervangen door allesbehalve een ' of een ".

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 19:44

Gerco

Professional Newbie

Voor zover ik weet snapt VB wel 2x " in een string en vervangt die door 1 ", maar 2x ' niet. de oplossing is dus inderdaad om je string te beginnen en eindigen met " en eventuele " te vervangen door "".

maw:
code:
1
UsedSQL = UsedSQL & "Naam_en_voorletters=""" & Replace(RsMain("Naam_en_voorletters").Value, """", """""") & ""","

Erg leesbaar is je uitdrukking nu niet, aangezien je de " ook weer moet escapen in je source, maar ik hoop dat je 'em snapt :P

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 02-09 09:31

Crazy D

I think we should take a look.

Door de " en ' zie ik de "'" niet meer :?
Dan maar ff een korte uitleg... ;)
Binnen een string is het enigste teken wat je moet escapen om VB het te laten snappen de " (aanhalingsteken), maar alleen als je die handmatig intypt, dus:
code:
1
str = "Peter zei: ""ik ben gek""."

Inhoud van str is:
Peter zei: "Ik ben gek".
Als dit in een textbox ingevoerd wordt, is het gewoon met 1 " en verder geen gekke dingen.
En als je daarna die string weer ergens anders aan gaat plakken, hoef je er niks meer mee te doen.


Het ' (enkele quotje) moet je vervangen door 2 keer een ' als je m in een query wilt gebruiken, VB vind alles best (al zet je 10 keer een ' op een rij...) alleen gaat je database na een tijdje de weg kwijt raken ;)
code:
1
sql = "where naam='van ''t hek'"

dus als je wilt zoeken op de naam van 't hek.
(Wat al snel ruikt naar een aparte functie (addSlashes ?).)

Overigens is _de_ manier om hier achter te komen even de inhoud van de variabele printen in de debug window, dan zie je het al vrij snel :)

Met
code:
1
UsedSQL = UsedSQL & "N_e_v='" & Replace(RsMain("N_e_v"), "'", "''") & "',"

is dus op zich niks mis (druk de inhoud maar eens af), ik kan me alleen voorstellen dat de komma (,) aan het eind daar misschien niet hoort... (tis niet gebruikelijk om een query te eindigen met een , :))

[edit]Naam_en_voorletters afgekort naar N_e_v, verziekt de layout niet zo :)

Exact expert nodig?


Verwijderd

Topicstarter
Ok, thankz voor de snelle reply's, en excuses voor dat ik hem in "SA" plaatste.

Well .. de komma achteraan de zin kan ik uitleggen, dat is omdat er nog een stuk of 25 andere velden in het script naar de database geklopt moeten worden. Op de 1 of andere manier blijft hij fokkop doen bij "Naam_en_voorletters" maar de zin blijkt dus wel goed te zijn dus, dus er zit een andere fout in :( *grumblez*

Het hele idee, (ik had er eerder een topic over gestart, poosje terug) is om een access database te laten synchroniseren zonder die functie van Access zelf te gebruiken, en via vb scriptje kan hij 's nachts gewoon via scheduler oid gestart worden. Dus geen manual geklooi.

Als er enigzins nog mensen belang bij hebben stuur dan even een mailtje. Als hij dan enigzins werkend is stuur ik hem wel door. ( Met dank aan Heckadude voor de sourcecode )

Ik ga even kijken of ik zo slim ben geweest om hem up te loaden en kan evt. de precieze foutmelding geven.

Verwijderd

Topicstarter
Ok, ben nu een stapje verder.
Het synchroniseren gaat "bijna" perfect. :9
Het enige punt waar ik nu nog op stuit is :

Ik laat hem voor de 1ste keer sync'en,(1 db bevat gegevens andere niet) het wordt netjes overgezet niks geen prob's.

Ik heb een vakje changeddate in de db, als deze b.v. in de "hostdb" nieuwer is als de "clientdb" dan wordt de clientdb overschreven door de hostdb. Het probleem wat dan verschijnt is : *VB begint te pruttelen*, FOUT ! Een veld heeft geen waarde .. "Ongeldig gebruik van NULL" oftewel omdat er niets is ingevuld geeft hij een fout melding. Desondanks dat ik in Access de optie "Lengte 0 toestaan" heb aanstaan. (Sorry van de nederlandse versie van access, maar jah, baas wil alles zo graag zo ..)

Hoe kan ik in vb een stukje inbouwen dat hij zeg maar eerst het veld controleert, dan als hij hem leeg aantreft, dat hij hem overslaat bij het updaten ?

Thankz in advance .. Dizpy ..

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 02-09 09:31

Crazy D

I think we should take a look.

Op woensdag 10 juli 2002 14:04 schreef Disposer het volgende:
Een veld heeft geen waarde .. "Ongeldig gebruik van NULL" oftewel omdat er niets is ingevuld geeft hij een fout melding. Desondanks dat ik in Access de optie "Lengte 0 toestaan" heb aanstaan. (Sorry van de nederlandse versie van access, maar jah, baas wil alles zo graag zo ..)
Hmm kun je bij een date/time field in Access aangeven dat ie lengte 0 mag zijn? (ik dacht alleen "requiered yes/no" en als ie niet verplicht is, dan is de waarde null).
Anyways, je ken eerst checken iets als
code:
1
2
3
4
5
If Not IsNull(rs("datumveld")) Then
    If Len(rs("datumveld")) > 0 Then
      ' doe iets
    End If
End If

Hoewel volgens mij dus een date/time veld alleen Null of een datum kan bevatten dus zou de check op Len() niet nodig zijn...

[edit]
ff getest, veld van het type date/time kan in mijn Access2000 alleen Null zijn, of een datum bevatten. IsNull check zou dus goed moeten zijn.

Exact expert nodig?


Verwijderd

Topicstarter
Sorry sorry sorry ..
Ik heb mezelf een beetje onhandig geformuleerd.

De changeddate functie gebruikte ik alleen om aan te geven dat hij controleert welke van de 2 de nieuwste is. Hij geeft een "null" foutmelding op tekstvakken.

Excuses ..

Ik ga nu even testen of dit ook geld voor tekstvakken, bedankt iig.
Pagina: 1