Avatar billede Slettet bruger
02. september 2005 - 10:58 Der er 23 kommentarer og
1 løsning

Import problematik

Hvis man har en db til styring af reservedele og der importeres lister fra excel. Så er problemet at nogle af reservedelene allerede er i systemet. Der kan være forskellige oplysninger, som følger med disse reservedelsnumre, der kan være stavefejl osv. Hver reservedel har derfor et stamkort, med oplysninger i. Når der så importeres skal der tjekkes om reservedelsnummer allerede findes i tabellen, hvis det ikke gør så skal feltet stamkort sættes til true.

Hvordan kunne man gribe dette an?~)
Avatar billede x4all_dk Nybegynder
02. september 2005 - 12:40 #1
Find et passende program at lave en DB-connection til din ACCESS DB, og
lav nogle SQL´er som opslår/indstætter data fra dit excell regneark.

F.eks. Er det ret let at lave en DB-connection i Delphi (http://www.borland.com/products/downloads/download_delphi.html) som
vist kan hentes i en trial version.

Så kan du gemme din Excell fil som .csv (comma separeret) og så lave noget
kode i Delphi som læser din .csv fil ind.

Så er det blot et spørgsmål om SQL´er til at indsætte data i din DB.

Hjalp det lidt ?
Avatar billede 2dbornot2db Nybegynder
02. september 2005 - 15:25 #2
Importer excelarket til en midlertidig tabel i din db.

Lav derefter en opdateringsforespørgsel, der kontrollerer for om reservedelsnummeret er i db'en i forvejen. Hvis det ikke er tilføjes posten. Efterfølgende kan du slette indholdet af den midlertidige tabel.
Avatar billede Slettet bruger
02. september 2005 - 15:31 #3
Det lyder som en mulighed men jeg kender ikke noget til Delphi og har ikke tid til at sætte mig ind i det nu. Jeg havde mere i retningen af 2dbornot2db's forslag jeg er bare ikke helt sikker på hvordan jeg lige koder det!~)
Avatar billede 2dbornot2db Nybegynder
02. september 2005 - 15:37 #4
Hvilken del af det er du usikker på? Importen eller forespørgslen?
Avatar billede Slettet bruger
02. september 2005 - 15:38 #5
ja!~)
Avatar billede 2dbornot2db Nybegynder
02. september 2005 - 15:40 #6
Har du mulighed for at sende mig din db? SPAMhoff@cbs.dkSPAM - fjern SPAM
Avatar billede Slettet bruger
02. september 2005 - 15:40 #7
Her er hvad jeg har:

Private Sub DataImport_Click()
Dim a As String
On Error GoTo err_dataimport
Me.DataImport.HyperlinkAddress = LaunchCD(Me)
Me.Tekst24 = Me.DataImport.HyperlinkAddress
a = Me.Tekst24
DoCmd.TransferSpreadsheet acImport, 0, "Reservedelsliste", a, True, ""
MsgBox "Følgende data er importeret"
err_dataimport:
Exit Sub
End Sub
Avatar billede Slettet bruger
02. september 2005 - 15:42 #8
Ovenstående virker, hvis jeg markerer det rigtige område i excel, men det skal gemmes som du siger i en midlertidig tabel. Herefter skal forespørgslerne køres eller måske skal man loope sig igennem, hvad ved jeg?~)
Avatar billede 2dbornot2db Nybegynder
02. september 2005 - 15:48 #9
I stedet for at skrive til "reservedelsliste" så skriv til en anden tabel, tblTemp.

Forespørgslen bliver derfor noget i denne retning:

INSERT INTO Reservedelsliste
SELECT
FROM tblTemp
WHERE tblTemp.fldReservedelsNavn Not In (SELECT fldReservedelsNavn FROM Reservedelsliste)
Avatar billede 2dbornot2db Nybegynder
02. september 2005 - 15:50 #10
Ups...

INSERT INTO Reservedelsliste
SELECT fldReservedelsNavn
FROM tblTemp
WHERE tblTemp.fldReservedelsNavn Not In (SELECT fldReservedelsNavn FROM Reservedelsliste)
Avatar billede Slettet bruger
02. september 2005 - 15:58 #11
okey nu er dataerne i tblTemp, jeg fortsætter varsomt!~)
Avatar billede Slettet bruger
02. september 2005 - 16:04 #12
Der påstås en syntaksfejl i sidste linie...
Avatar billede 2dbornot2db Nybegynder
02. september 2005 - 16:05 #13
Du kan formentlig med fordel lave en GROUP BY i SQL-sætningen så du ikke får redundante importer.
Avatar billede Slettet bruger
02. september 2005 - 16:05 #14
Jeg kan jo bare stave FROM rigtigt!!!!!~)
Avatar billede 2dbornot2db Nybegynder
02. september 2005 - 16:06 #15
Jeg kan nu ikke umiddelbart se nogen syntaksfejl (?) Er det evt. tabel/feltnavnene der ikke er rigtige?
Avatar billede Slettet bruger
02. september 2005 - 16:11 #16
Der var noget brok om en cirkulær reference og så lavede access selv denne sql:

INSERT INTO reservedelsliste ( reservedelsnr )
SELECT tblTemp.Reservedelsnr
FROM tblTemp
WHERE (((tblTemp.Reservedelsnr) Not In (select reservedelsnr from reservedelsliste)));

Den giver dog ikke nogen hits og det burde der være..
Avatar billede 2dbornot2db Nybegynder
02. september 2005 - 16:17 #17
Så prøv først at ændre den fra en opdateringsforespørgsel til en alm. forespørgsel og leg lidt rundt med kriterierne.
Avatar billede Slettet bruger
02. september 2005 - 16:58 #18
Ok.... Jeg kunne ikke få det til at virke, men jeg brugte min egen logiske (læs måske ikke den smarteste) fremgangsmåde..

Først tilføje de data, som er i begge tabeller, så slette disse fra tblTemp. Så tilføje de resterende, med stamkort sat til true og så slette disse.

Kønt er det ikke, men det virker!~)

Jeg lukker nu og tak for hjælpen, hvis du har nogle sidste ord især om hvordan man bruger Not In, så er jeg meget interesseret. Vi er her for at blive bedre....

Go' weekend!~)

ps. smid et svar, så får du points tirsdag..........
Avatar billede mugs Novice
02. september 2005 - 17:40 #19
Hvad med at indeksere feltet "reservedelsnummer"?
Avatar billede Slettet bruger
06. september 2005 - 09:44 #20
mugs>er det en løsning til 02/09-2005 16:11:10?~)
Avatar billede mugs Novice
06. september 2005 - 10:38 #21
Nej - Ved at indeksere og sige Nej til dubletter feltet kan der ikke forekomme dubletter i tabellen. Og det var vel det dit oprindelige spørgsmål gik ud på.
Avatar billede Slettet bruger
06. september 2005 - 12:05 #22
Nej, det er måske lidt utydeligt, men reservedelene skal ind i systemet. Det der er problemet er at der kommer flere "versioner" ind af den samme reservedel, kun nr er unikt. Når jeg så bruger reservedele videre ud i systemet, hvor skal jeg så hente navn, beskrivelse, type osv. fra? Her kommer stamkortet ind i billedet...

Men, jeg har løst det, lidt klodset, men det virker lige efter hensigten!~)

2dbornot2db satte mig på sporet og nåeh ja, jeg ved ikke hvor tæt hans løsning var på at være den rigtige, men det så lovende ud, så alt i alt syntes jeg han skulle smide et svar.....
Avatar billede 2dbornot2db Nybegynder
06. september 2005 - 16:10 #23
Svar :-)
Avatar billede Slettet bruger
07. september 2005 - 14:04 #24
Tak!~)
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