Just nu i M3-nätverket
Gå till innehåll

Hämta data i en tabell och skriva i en annan


rolfr

Rekommendera Poster

Jag har en tabell med medlemmars namn och andra uppgifter. En annan tabell tömmer jag först och läser sedan in lite olika fält i från en textfil. Tanken är komplettera den andra tabellen med födelsedagen från första tabellen. Jag stöter på patrull när jag vill stega igenom andra tabellen och där läsa in medlemmarnas födelsedag.

 

Jag har lyckats läsa första raden i andra tabellen och ta fram medlemsnumret. Sedan med hjälp av dlookup och detta medlemsnummer ta fram födelsedagen ur första tabellen. Men jag kan inte stega mig igenom andra tabellen som skall ha dessa data. Det är alltså öppningen och stegningen av andra tabellen som jag inte får att fungera. Tycker att jag har med hjälp av Googling testat alla möjliga varianter, men de ger bara felmeddelanden hos mig. Hoppas någon kan tipsa mig rätt. 

Länk till kommentar
Dela på andra webbplatser

Jag hade gjort den biten utanför Access genom att exportera tabellerna och fixat det i excel och sen importera tillbaka till Access.

Länk till kommentar
Dela på andra webbplatser

Här har du kod för att lägga till en ny post i den andra tabellen. Datumfältet uppdateras bara om dlookup hittar medlemsnumret i första tabellen.

' Hitta födelsedatum
dat = DLookup("DATUM", "tblFORSTA", "MEDLEMSNR=" & nr)

' Lägg till i den andra tabellen
' Detta skapar en ny post, dvs
' stegar fram till en ny post
rs.AddNew

' Lägg till medlem
rs!medlemsnr = nr

' Om datum hittades, lägg till
If Not IsNull(dat) Then rs!FODD = CVDate(dat)

' Spara posten
rs.Update

Länk till kommentar
Dela på andra webbplatser

Hela funktionen. Skicka PM om du vill ha en fullständig testdatabas.

Sub addBirthdate(fil$)
    Dim fnr#, nr As Long, dat As Variant, arr As Variant, rs As DAO.Recordset, s$
    
    ' Öppna andra tabellen
    Set rs = CurrentDb.OpenRecordset("tblANDRA")
    
    ' Öppna textfilen
    fnr = FreeFile
    Open fil For Input As #fnr
    
    ' Stega igenom textfil
    Do Until EOF(fnr)
        ' Läs en rad från textfilen
        Line Input #fnr, s
        
        ' Dela upp fälten från raden i en array
        ' I detta fall förutsätts att fältavskiljaren är ett tabtecken, chr(9)
        arr = Split(s, Chr(9))
        
        ' Hämta medlemsnummer från rätt position
        nr = CLng(arr(0)) ' 0=första fältet, 1=andra etc
        
        ' Hitta födelsedatum
        dat = DLookup("DATUM", "tblFORSTA", "MEDLEMSNR=" & nr)
        
        ' Lägg till i den andra tabellen
        rs.AddNew ' Detta skapar en ny post, dvs stegar fram till en ny post
        rs!medlemsnr = nr
        If Not IsNull(dat) Then rs!FODD = CVDate(dat)   ' Om datum hittades, lägg till
        rs.Update
    Loop
    
    ' Stäng
    Close #fnr
    rs.Close
End Sub


Länk till kommentar
Dela på andra webbplatser

Tune: Jag kan inte gå via Excel eftersom det inte gäller att komplettera en enda gång. Detta skall göras flera gånger i veckan och av olika personer, så det måste vara helt automatiskt.

 

MickeF: Tack för ingående förslag. Mycket av det du tipsar om har jag redan gjort och som jag skrev är det bara en enda sak som jag inte får ihop.

 

Av mina två tabeller vill jag kopiera ett fält från den ena tabellen till den andra. Denna andra tabell har bara ett mindre antal poster och jag behöver stega igenom den för att se vilka poster som för dagen är aktuella. Just stegningen genom alla posterna skapar mig huvudbry.

Länk till kommentar
Dela på andra webbplatser

1) En annan tabell tömmer jag först

2) och läser sedan in lite olika fält i från en textfil.

3) Tanken är komplettera den andra tabellen med födelsedagen från första tabellen.

4) Jag stöter på patrull när jag vill stega igenom andra tabellen och där läsa in medlemmarnas födelsedag.

 

5) Jag har lyckats läsa första raden i andra tabellen och ta fram medlemsnumret.

6) Sedan med hjälp av dlookup och detta medlemsnummer ta fram födelsedagen ur första tabellen.

7) Men jag kan inte stega mig igenom andra tabellen som skall ha dessa data. Det är alltså öppningen och stegningen av andra tabellen som jag inte får att fungera.

 

Ta en titt på min funktion, den gör steg 2,3,4,5,6 i ett enda steg och då behöver man inte göra steg 7 dvs att öppna tabellen igen.

 

Om du ändå vill stega igenom den andra tabellen gör du det med följande kod, visar även kod för att ändra posten

    Do Until rs.Eof
        ' HÄR lägger du kod för att läsa posten
        rs.Movenext
    Loop

   Do Until rs.Eof
        ' Här lägger du kod för att ändra posten
        rs.Edit
        rs!FODD= Datum
        rs.Update
        rs.Movenext
    Loop

Länk till kommentar
Dela på andra webbplatser

Tack Micke, det är precis så det skall göras. Och det var så jag försökte, men det stupade på att jag inte fick hop recordsetet. När jag skulle definiera både databasen och själva recordsetet fick jag felmeddelande.

 

Dim db AS Database

Dim rs AS DAO.Recordset

 

fungerade inte. Och det är så det skall göras enligt många tips på nätet. Men här blev det fel hos mig.

 

Nu har jag hittat vad det var som var fel. I den dator jag använder var inte Microsoft DAO 3.6 Object Library definierat. Nu har jag gjort det och det fungerar utan felmeddelanden.

 

Om någon annan undrar hur man definierar det så vill jag berätta det här. Under Verktyg --> Referenser... får man upp en ruta där de markerade är de som laddas in. Om just den jag nämnde saknas, bläddrar man ner till dem från Microsoft och bockar i den, så kommer den med i fortsättningen.

Länk till kommentar
Dela på andra webbplatser

Bra att du hittat vad det var som var fel. Problem med referenser är ett mycket vanligt fel.

Lycka till med programmet.

Länk till kommentar
Dela på andra webbplatser

 

 

Tune: Jag kan inte gå via Excel eftersom det inte gäller att komplettera en enda gång. Detta skall göras flera gånger i veckan och av olika personer, så det måste vara helt automatiskt.

Du skrev inte att det var åtgärd som skulle ske mer frekvent.

Länk till kommentar
Dela på andra webbplatser

Nej sorry att jag inte skrev just det. Men jag bemödade mig i alla fall att skriva om just den detalj som var mitt problem: Att stega eller loopa mig igenom tabell 2.

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...