Avatar billede madiedk Nybegynder
26. maj 2009 - 10:44 Der er 8 kommentarer

Insert null value via VBA variabel

Hej

jeg har et excelark med 20 kolonner der skal indsættes i en tilsvarende tabel i access med 20 felter.
der er 4000 rækker i excelarket.
Problemet er at nogle at kolonnerne er tomme og det resultere i at der opstår en fejl i min sqlsætning.
min VBA kode er skrevet i en excel makro som f.eks. her (bare med 3 koloner):

rapCon.Execute "INSERT INTO RA_IFR (Navn, Fondskode, Dato) VALUES ('" & Cells(i, 1) & "', '" & Cells(i, 2) & "', '" & Cells(i, 3) & "')"

hvis nu f.eks. Cells(i, 3) er tom så skriver den at "datatyperne stemmer ikkeoverens i kriterieudtrykket" men hvis der står noget i alle 3 kolonner hele vejen nej så virker den perfekt.

hvis jeg f.eks skriver:

rapCon.Execute "INSERT INTO RA_IFR (Navn, Fondskode, Dato) VALUES ('" & Cells(i, 1) & "', '" & Cells(i, 2) & "', null)"

så fejler den ikke. Men hvordan får jeg sådan en "null" value ind i en variabel så den ikke fejler?
Jeg har prøvet rigtig meget.

jeg vil gerne undgå at skulle skrive 200 sql sætninger for at dække hver eneste kombination.
Avatar billede Slettet bruger
26. maj 2009 - 11:22 #1
Hvis Fondskode er et tal, skal du ikke have enkeltgnyffer omkring Cells(i,2).

Når du indsætter en dato, skal du huske havelågerne (#)omkring Cells(i,3) - hvis det er et datofelt - og så skal du huske at anvende det SQL-venlige datoformat mm/dd/yy

Prøv ligeledes at sæt egenskaben TilladNullængde til Ja og egenskaben Obligatorisk til Nej i tabeldesign

Ellers prøv denne:

Dim Cell1 as Variant
Dim Cell2 as Variant
Dim Cell3 as Variant

  Cell1=Nz(Cells(i,1),"")
  Cell2=Nz(Cells(i,2),0)
  Cell3=Nz(Cells(i,3),0)
 
og brug varianblerne i din INSERT sætning
Avatar billede terry Ekspert
26. maj 2009 - 19:15 #2
Normally inserting requires '2009/05/26' and not #2009/05/26#

Cell3=Nz(Cells(i,3),0)

Isnt this going to give problems with the insert in to a date field?

'0'


I would suggest building your sql dynamically. For the fields containing no data and which arent required, such as your dato field then dont include them in the insert. Otherwise you should give them a default value.
Avatar billede madiedk Nybegynder
26. maj 2009 - 20:34 #3
men hvis de ikke skal være inkluderet i min insert sætning, så skal jeg jo lave 200 kombinationer.
Avatar billede terry Ekspert
26. maj 2009 - 20:58 #4
Why 200 combinations when there are only 20 fields in the table?

And for most of the fields (numeric and text) you will be able to use the method schlamovitz gave.
Avatar billede madiedk Nybegynder
30. maj 2009 - 18:27 #5
fordi at der er 4000 rækker og i række et er det måske kolonne 3,6 og 10 der er tom og i række 2 er det kolonne 5,8 og 17 der er tom osv. der er 3 dato kolonner og 13 tal kolonner som skal være tomme og ikke 0. da der er forskel på om de er tomme eller om der står 0
Avatar billede terry Ekspert
30. maj 2009 - 19:00 #6
I still dont understand why you need 200 combinations when there are only 20 columns.

You test each column and add it to the SQL string if it contains a value. If its empty then dont add it.
Avatar billede madiedk Nybegynder
30. maj 2009 - 20:05 #7
okay, måske ikke 200 det var bare et tal jeg slyngede ud. Jeg forstår ikke din løsning så.

kan du ik gi et eksempel?
Avatar billede madiedk Nybegynder
04. februar 2010 - 13:49 #8
Jeg mener bare at f.eks i række 13 så er det kun 13 kolonner der skal ind i databasen og i række 14 er det måske 18 rækker der skal ind og række 15 er det 3 rækker  osv. hvordan løses det?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester