Avatar billede BIRGER Seniormester
23. november 2003 - 00:42 Der er 12 kommentarer og
1 løsning

melding om dobbeltposter

Jeg bruger et program der ovf data fra access til word via vba-kode. I øjeblikket gøres det via kundenr, som der ikke findes to ens af. Nu vil jeg lave programmet om så kunden skal findes via tlf.-nr, som der godt kan være flere ens af. Kan dette opfanges (altså at det indtastede tlf.nr peger på flere kundernr.) og er det muligt at vælge hvilken kunde man ønsker at få overført.

hilsen
bi
Avatar billede squashguy Nybegynder
23. november 2003 - 00:56 #1
database-strukturen kunne være:

tabel:telefonnr
----------------
unik_id
telefon_nr
person_id -peger på personen


tabel:personer
---------------
person_id
...
Avatar billede BIRGER Seniormester
23. november 2003 - 01:12 #2
ja men men jeg lidt på selve koden?
Avatar billede squashguy Nybegynder
23. november 2003 - 01:13 #3
ak og ve. Jeg er ikke visual basic mand :)
Avatar billede martin_moth Mester
23. november 2003 - 08:28 #4
Ved ikke noget om databaser, men du kan tjekke om et telefonnummer allerede findes.

Nu ved jeg ikke hvordan du smider data fra access til Word - bruger du vba i word eller i access, bruger du sql, bruger du kontroller der er bundet til databasen, hvad gør du?

Uanset hvad du gør skulle det være let at tjekke, men vis lige lidt kode først :o)
Avatar billede BIRGER Seniormester
23. november 2003 - 09:12 #5
Det er lavet i vba-word:
Sub Kunde()
Kundenr = InputBox("indtast kundenr")
    Dim objConn As ADODB.Connection
    Dim objRs As ADODB.Recordset
    Dim strConnString As String
    Dim strSQL As String

    Set objConn = New ADODB.Connection
    Set objRs = New ADODB.Recordset
   
    strConnString = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=C:\dokumenter\kartoteker.MDb"
    objConn.Open strConnString
   
    strSQL = "SELECT Kundenr,Navn1, Adresse, postby FROM kundekartotek WHERE Kundenr = " & Kundenr
    objRs.Open strSQL, objConn
  If Not objRs.EOF Then
Selection.TypeText Text:="Kundenr: " & objRs("Kundenr") & vbCrLf
        Selection.TypeText Text:="" & objRs("Navn1") & vbCrLf
        Selection.TypeText Text:="" & objRs("Adresse") & vbCrLf
        Selection.TypeText Text:="" & objRs("postby") & vbCrLf
objRs.Close
    objConn.Close
 
Else
    MsgBox "Kundenr. findes ikke"
End
  End If

end Sub
Avatar billede martin_moth Mester
23. november 2003 - 09:51 #6
Øhh - jeg har svært ved at få øje på telefonnumere?
Avatar billede BIRGER Seniormester
23. november 2003 - 10:01 #7
der er også tlfnr på kunderne i databasen...jeg vil så ændre til at der indtastes tlfnr i stedet for kundenr. Jeg ved at der vil optræde ens tlf.nr..det vil jeg så fange når der gør, og give mulighed for at vælge hvilken konto der skal vælges, når f.eks ettlfnr. peger på flere konti
Avatar billede martin_moth Mester
23. november 2003 - 10:09 #8
Hmm - der er jo mange måder at angribe det på. Kommer med et bud lidt senere
Avatar billede terry Ekspert
23. november 2003 - 10:18 #9
dlg>What is the point in having a field as the "primary key" which you KNOW can be duplicate? But then that isnt my probelm is it :o)

objRs.recordcount tells you how many records are in the recordset.
Avatar billede terry Ekspert
23. november 2003 - 10:23 #10
The only way I see you can select a specific "kunde" from moe thant one is either using a primary key which you know the value of, or include another field in the WHERE of your select which specifies the one you want, for example.

strSQL = "SELECT Kundenr,Navn1, Adresse, postby FROM kundekartotek WHERE TelefonNr = '" & TelefonNr & "' AND PostBy = " & PostBy

But in my opinion you are making problems for yourself!
Avatar billede martin_moth Mester
23. november 2003 - 10:35 #11
Sub Kunde()
    Telefonnr = InputBox("indtast telefonnr") '< RETTET
    Dim objConn As ADODB.Connection
    Dim objRs As ADODB.Recordset
    Dim strConnString As String
    Dim strSQL As String
    Dim arrNavn() as String '< NY
    Dim arrAdresse() as String '< NY
    Dim arrPostnr() as Integer '< NY
    Dim arrKundenr() as Integer '< NY
    Dim strTelefonnr as String '< NY


    Set objConn = New ADODB.Connection
    Set objRs = New ADODB.Recordset
   
    strConnString = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=C:\dokumenter\kartoteker.MDb"
    objConn.Open strConnString
   
    strSQL = "SELECT Kundenr,Navn1, Adresse, telefonnr, postby FROM kundekartotek WHERE telefonnr = " & telefonnr  '< RETTET
    objRs.Open strSQL, objConn
 
'Så kommer min molbo-agtige kode:

  i = 0
  While not objRs.EOF
    i = i+1
    strTelefonnr = objRs("telefonnr")
    redim preserve arrNavn(i)
    redim preserve arrAdresse(i)
    redim preserve arrPostnr(i)
    redim preserve arrkundenr(i)
    arrNavn(i) = objRs("Navn1")
    arrAdresse(i)= objRs("Adresse")
    arrPostnr(i) = objRs("postby")
    arrkundenr(i) = objRs("Kundenr")
  wend
  if i>1 then
    msgbox " Der findes " & i-1 " poster med det nummer. Vælg en"
    'En form eller lignende der viser valgmuligheder (udlæses fra arrays) vises
    'og der vælges en post. Posten registreres (som post nummer 'i' - dvs. 'i'
    'får den værdi som brugeren vælger)
  end if

If Not objRs.EOF Then
Selection.TypeText Text:="Kundenr: " & arrkundenr(i) & vbCrLf
        Selection.TypeText Text:="" & arrNavn(i) & vbCrLf
        Selection.TypeText Text:="" & arrAdresse(i) & vbCrLf
        Selection.TypeText Text:="" & arrPostnr(i) & vbCrLf
objRs.Close
    objConn.Close
 
Else
    MsgBox "Kundenr. findes ikke"
End
  End If


Sådan. Er ikke testet. Jeg ved ikke hvor telefonnummer står og hvad posten hedder i din database, ret selv i bl.a. din connectionstring. Og hvordan du vil lade brugeren vælge mellem flere poster ved jeg ikke, måske ved en form med radiobuttons, eller en listbox hvor der klikkes på den post der skal vælges, eller... Det må du selv vælge :o)

Har ikke testet, så måske er der en smutter et sted. Men nu har du da en ide til en fremgangsmåde.

En anden måde er at operere direkte på recordsettet i stedet for at smide det over i arrays. Det har jeg bare lidt uheldige erfaringer med, derfor foreslår jeg løsningen med arrays....
Avatar billede martin_moth Mester
23. november 2003 - 10:36 #12
Og der skal vist ikke stå i-1, bare i
Avatar billede BIRGER Seniormester
23. november 2003 - 10:48 #13
jeg prøver ......foreløbig 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
Kurser inden for grundlæggende programmering

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

IT-JOB