Fejl i kopieringsfunktion
Jeg har en DB beregnet til registrering af en række bygningers drift og vedligeholdsoplysninger.Ideen er at man udfylder en bygning med detaljerede bygningsdele, og derefter henter en kopi af disse data over i de andre.
Kopifunktionen aktiveres fra en form, når der klikkes på knappen ( se evt. billede: http://www.folda.dk/dbkopiform.gif ).
Desværre roder kopifunktionen rundt i dataene, så data fra en post somme tider mangler i kopien, andre gange stammer de kopierede data fra andre poster!
Her ses et eksempel på data der er kopieret fra en bygning, og som ikke svarer overens med originalen: http://www.folda.dk/dbkopiproblem.gif
Er der nogen der har et bud på hvor fejlen ligger?
Koden bag kopieringsknappen er her (Jeg ved godt at det er en ordentlig smøre):
Option Compare Database
Option Explicit
Public intgr As Integer
Private Sub cmdKopi_Click()
Dim rsBygningsDel, rsBygningsdelExist As Recordset
Dim intZ, intx As Integer
Dim varRecordsBygdel As Variant
Set rsBygningsDel = CurrentDb.OpenRecordset("SELECT * From tblBygningsdel WHERE " & _
"tblBygningsdel.Bygningsindeks = " & txtBygningsIndeks.Value, dbOpenDynaset)
Set rsBygningsdelExist = CurrentDb.OpenRecordset("SELECT * From tblBygningsdel WHERE " & _
"tblBygningsdel.Bygningsindeks = " & intgr, dbOpenDynaset)
If Not (rsBygningsDel.BOF) Then
If rsBygningsdelExist.BOF Then
rsBygningsDel.MoveLast
intZ = rsBygningsDel.RecordCount
rsBygningsDel.MoveFirst
varRecordsBygdel = rsBygningsDel.GetRows(intZ)
For intZ = 0 To intZ - 1
With rsBygningsDel
.AddNew
!BYGNINGSINDEKS = intgr
!SFB_INDEKS = varRecordsBygdel(2, intZ)
!Materiale = varRecordsBygdel(3, intZ)
!Emne1 = varRecordsBygdel(4, intZ)
!Emne2 = varRecordsBygdel(5, intZ)
!komp_placering = varRecordsBygdel(6, intZ)
!plac_kode = varRecordsBygdel(7, intZ)
.Update
End With
Next intZ
kopidata intgr
Else
MsgBox "Der findes allerede bygningsdata for " & varBygning, vbExclamation, "M E D D E L E L S E"
End If
Else
MsgBox "Der findes ingen bygningsdata for " & Me!txtbygning.Value, vbExclamation, "M E D D E L E L S E"
End If
End Sub
Private Sub kopidata(indx)
Dim rsFraÅr As Recordset
Dim rsTilÅr As Recordset
Dim strSQL As String
Dim blData As Boolean
Dim lnIndxValue As Long
Dim blCheck As Boolean
Dim intCount As Integer
Dim rscount As Integer
Dim rsObjektId As Recordset
strSQL = "SELECT tblBygningsdel.Objekt_ID FROM tblBygningsdel " & _
"WHERE (((tblBygningsdel.Bygningsindeks)=" & indx & "));"
Set rsObjektId = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)
strSQL = "SELECT tblBYGNINGSDEL.Bygningsindeks, tblKonstateringsÅr.* " & _
"FROM tblBYGNINGSDEL INNER JOIN tblKonstateringsÅr ON tblBYGNINGSDEL.Objekt_ID = " & _
"tblKonstateringsÅr.Index_Konstår " & _
"WHERE (((tblBYGNINGSDEL.Bygningsindeks)=" & txtBygningsIndeks.Value & ") AND " & _
"((tblKonstateringsÅr.Konstateringsår)=" & varÅr & "));"
Set rsFraÅr = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)
rsFraÅr.MoveLast
rscount = rsFraÅr.RecordCount
intCount = 1
'strSQL = "SELECT tblBYGNINGSDEL.Bygningsindeks, tblKonstateringsÅr.* " & _
"FROM tblBYGNINGSDEL INNER JOIN tblKonstateringsÅr ON tblBYGNINGSDEL.Objekt_ID = " & _
"tblKonstateringsÅr.Index_Konstår " & _
"WHERE (((tblBYGNINGSDEL.Bygningsindeks)=" & indx & ") AND " & _
"((tblKonstateringsÅr.Konstateringsår)=" & varÅr & "));"
strSQL = "SELECT tblKonstateringsår.* FROM tblkonstateringsår;"
Set rsTilÅr = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)
If rsTilÅr.BOF Then
blData = False
Else
blData = True
End If
rsFraÅr.MoveFirst
blCheck = True
Dim valPrioritet
Dim valPrioritet_år
Dim valMåned
Dim valGarantiudførelse
Dim valKalkuleret_Pris
Dim valFaktuel_Pris
Dim valPr_tekst
Dim valSærundersøgelse
Dim valSkadesårsag
Dim valSkade_kode
Dim valKommentarer
Dim valFag
Dim valVedligeholdstype
Dim valStilladskrav
Dim valRum
Dim valRumareal
Dim valOrientering
Dim valMængde
Dim valMængde_Enhed
Dim valEnhedspris
Dim valVedl_int
Dim valNotat
Dim valAreal_Nøgletal
Dim valLokalisering
Dim valOprettet_af_konstatering
While intCount <= rscount
With rsFraÅr
lnIndxValue = .Fields("Index_Konstår").Value
valPrioritet = .Fields("Prioritet").Value
valPrioritet_år = .Fields("Prioritet_år").Value
valMåned = .Fields("Konstateringsmåned").Value
valGarantiudførelse = .Fields("Garantiudførelse").Value
valKalkuleret_Pris = .Fields("Kalkuleret_Pris").Value
valFaktuel_Pris = .Fields("Faktuel_Pris").Value
valPr_tekst = .Fields("Pr_tekst").Value
valSærundersøgelse = .Fields("Særundersøgelse").Value
valSkadesårsag = .Fields("Skadesårsag").Value
valSkade_kode = .Fields("Skade_kode").Value
valKommentarer = .Fields("Kommentarer").Value
valFag = .Fields("Fag").Value
valVedligeholdstype = .Fields("Vedligeholdstype").Value
valStilladskrav = .Fields("Stilladskrav").Value
valRum = .Fields("Rum").Value
valRumareal = .Fields("Rumareal").Value
valOrientering = .Fields("Orientering").Value
valMængde = .Fields("Mængde").Value
valMængde_Enhed = .Fields("Mængde_Enhed").Value
valEnhedspris = .Fields("Enhedspris").Value
valVedl_int = .Fields("Vedl_int").Value
valNotat = .Fields("Notat").Value
valAreal_Nøgletal = .Fields("Areal_Nøgletal").Value
valOprettet_af_konstatering = "kopi af " & varÅr
valLokalisering = .Fields("lokalisering").Value
If blData Then
rsTilÅr.MoveFirst
blCheck = True
While Not (rsTilÅr.EOF)
With rsTilÅr
' If .Fields("index_konstår").Value = lnIndxValue Then blCheck = False
End With
rsTilÅr.MoveNext
Wend
End If
If blCheck = True Then
.AddNew
!Index_Konstår = rsObjektId.Fields(0).Value
!Konstateringsår = varÅr
!Konstateringsmåned = valMåned
!Prioritet = valPrioritet
!Prioritet_år = valPrioritet_år
!Garantiudførelse = valGarantiudførelse
!Kalkuleret_Pris = valKalkuleret_Pris
!Faktuel_Pris = valFaktuel_Pris
!Pr_tekst = valPr_tekst
!Særundersøgelse = valSærundersøgelse
!Skadesårsag = valSkadesårsag
!Skade_kode = valSkade_kode
!Kommentarer = valKommentarer
!Fag = valFag
!Vedligeholdstype = valVedligeholdstype
!Stilladskrav = valStilladskrav
!Rum = valRum
!Rumareal = valRumareal
!Orientering = valOrientering
!Mængde = valMængde
!Mængde_Enhed = valMængde_Enhed
!Enhedspris = valEnhedspris
!Vedl_int = valVedl_int
!Notat = valNotat
!Lokalisering = valLokalisering
!Areal_Nøgletal = valAreal_Nøgletal
!oprettet_af_konstatering = valOprettet_af_konstatering
.Update
End If
End With
intCount = intCount + 1
rsFraÅr.MoveNext
rsObjektId.MoveNext
Wend
rsFraÅr.Close
rsTilÅr.Close
End Sub
Private Sub Form_Open(Cancel As Integer)
cmdKopi.Visible = False
Me![txtOverskrift].Value = varBygning
End Sub
Private Sub listBygning_AfterUpdate()
Dim rsValgtBygning As Recordset
Dim varRecordValgt As Variant
txtbygning.Value = listBygning.Column(0)
txtBygningsIndeks.Value = listBygning.Column(1)
cmdKopi.Visible = True
Set rsValgtBygning = CurrentDb.OpenRecordset("SELECT * From tblBygning WHERE " & _
"tblBygning.Bygningsbetegnelse= '" & varBygning & "'", dbOpenDynaset)
rsValgtBygning.MoveFirst
intgr = rsValgtBygning.Fields("bygningsindex")
End Sub
Private Sub luk_Click()
On Error GoTo Err_luk_Click
RunCommand acCmdClose
DoCmd.OpenForm "frmBygning"
Exit_luk_Click:
Exit Sub
Err_luk_Click:
MsgBox Err.Description
MsgBox Err.Number
Resume Exit_luk_Click
End Sub
