Jump to content

VBA nepievienojas dati tabulai


raaicha
 Share

Recommended Posts

Sveiki,

 

Veidoju formu iekš MS Access ar vadības pogām, izveidoju vairākas pogas, bet pogas "Pievienot" nenostrādā, tas būtu ievadu datus, nospiežu pievienot, viss takā izpildās bez kļūdām, bet tabulā dati neparādās...

 

Kur varētu būt problēma?

 

P.S

 

Sorry par dubultpostu, interneta kļūmes dēļ. 

 

Kods :

Private Sub btnAdd_Click()
    'kad spiežam uz pogas Pievienot tur ir divas opcijas
    '1. Pievienot
    '2. Atjaunot
    If Me.txtKlientaID.Tag & "" = "" Then
        'tas ir priekš pievienot jaunu
        'pievienot datus tabulai
        CurrentDb.Execute "INSERT INTO tblKlienti(KlientaID, Vards, Uzvards, Epasts, Talrunis, Valsts, Novads, Pilseta, Pagasts, PastaIndekss) " & _
                "VALUES(" & Me.txtKlientaID & ",'" & Me.txtVards & "','" & _
                Me.txtUzvards & "','" & Me.txtEpasts & "','" & _
                Me.txtTalrunis & "','" & Me.cboValsts & "','" & _
                Me.cboNovads & "','" & Me.cboPilseta & "','" & _
                Me.cboPagasts & "','" & Me.txtPastaIndekss & "')"
    Else
        'citādāk (Tag no KlientaID glabā id no lietotāja kas būs jāmaina)
        CurrentDb.Execute "UPDATE tblKlienti " & _
                " SET KlientaID=" & Me.txtKlientaID & _
                ", Vards='" & Me.txtVards & "'" & _
                ", Uzvards='" & Me.txtUzvards & "'" & _
                ", Epasts='" & Me.txtEpasts & "'" & _
                ", Talrunis='" & Me.txtTalrunis & "'" & _
                ", Valsts='" & Me.cboValsts & "'" & _
                ", Novads='" & Me.cboNovads & "'" & _
                ", Pilseta='" & Me.cboPilseta & "'" & _
                ", Pagasts='" & Me.cboPagasts & "'" & _
                ", PastaIndekss='" & Me.txtPastaIndekss & "'" & _
                " WHERE KlientaID=" & Me.txtKlientaID.Tag
    End If
    '

    'attīrīt formu
    btnClear_Click
    'atsvaidzina datus formā
    frmKlientiSub.Form.Requery
End Sub
Labots - raaicha
Link to comment
Share on other sites

_dunduks_

Ni kurienes tev KlientaID rodas, ja Me.txtKlientaID.Tag & "" = ""

Varbūt null vērtību tur pievienot nevar?

Link to comment
Share on other sites

 

 

Varbūt null vērtību tur pievienot nevar?

 

Tad viņš izlaiž If un ķerās pir Else un neņem kodu pretī ..

 

Syntax error (missing operator) in query expression 'KlientaID='

Link to comment
Share on other sites

Mezavecis

Izvadi ar visu pieprasījumu, kādu tu taisies likt datu bāzē un pēc tam to manuāli izpildi iekš Access. Ja kāds no datu bāzes laukiem ir atzīmēts kā "not null" un dati būs tukši, tad protams, ka šādu ierakstu nevar ievietot. 

 

Ieteiktu to notestēt gan ar insert, gan update, lai pārliecinātos, ka ar datiem un pieprasījumiem viss kārtībā.

Link to comment
Share on other sites

_dunduks_
Tad viņš izlaiž If un ķerās pir Else un neņem kodu pretī ..

Nepareizi! Viņš pie Else ķeras tikai gadījumā, ja Me.txtKlientaID.Tag<>""

Labots - _dunduks_
Link to comment
Share on other sites

 

 

Nepareizi! Viņš pie Else ķeras tikai gadījumā, ja Me.txtKlientaID.Tag<>""
 

 

tā vismaz Debug parāda

Link to comment
Share on other sites

_dunduks_

Kāds lauka tips tev ir KlientaID?

Un kāda vērtība Debug režīmā tiek pieķširta Me.txtKlientaID.Tag?

Link to comment
Share on other sites

 

 

Kāds lauka tips tev ir KlientaID? Un kāda vērtība Debug režīmā tiek pieķširta Me.txtKlientaID.Tag?
 

 

KlientaID ir Number

Me.txtKlientaID.Tag vārtību dabon kad tiek izmantota poga Labot

Ieliku pilno kodu no formas:

Option Compare Database

Private Sub btnExit_Click()
DoCmd.Close
DoCmd.OpenForm "frmNavigacija"
End Sub

Private Sub btnAdd_Click()
    'kad spiežam uz pogas Pievienot tur ir divas opcijas
    '1. Pievienot
    '2. Atjaunot
    If Me.txtKlientaID.Tag & "" = "" Then
        'tas ir priekš pievienot jaunu
        'pievienot datus tabulai
        CurrentDb.Execute "INSERT INTO tblKlienti(KlientaID, Vards, Uzvards, Epasts, Talrunis, Valsts, Novads, Pilseta, Pagasts, PastaIndekss) " & _
                "VALUES(" & Me.txtKlientaID & ",'" & Me.txtVards & "','" & _
                Me.txtUzvards & "','" & Me.txtEpasts & "','" & _
                Me.txtTalrunis & "','" & Me.cboValsts & "','" & _
                Me.cboNovads & "','" & Me.cboPilseta & "','" & _
                Me.cboPagasts & "','" & Me.txtPastaIndekss & "')"
    Else
        'citādāk (Tag no KlientaID glabā id no lietotāja kas būs jāmaina)
        CurrentDb.Execute "UPDATE tblKlienti " & _
                " SET KlientaID=" & Me.txtKlientaID & _
                ", Vards='" & Me.txtVards & "'" & _
                ", Uzvards='" & Me.txtUzvards & "'" & _
                ", Epasts='" & Me.txtEpasts & "'" & _
                ", Talrunis='" & Me.txtTalrunis & "'" & _
                ", Valsts='" & Me.cboValsts & "'" & _
                ", Novads='" & Me.cboNovads & "'" & _
                ", Pilseta='" & Me.cboPilseta & "'" & _
                ", Pagasts='" & Me.cboPagasts & "'" & _
                ", PastaIndekss='" & Me.txtPastaIndekss & "'" & _
                " WHERE KlientaID=" & Me.txtKlientaID.Tag
    End If
    '

    'attīrīt formu
    btnClear_Click
    'atsvaidzina datus formā
    frmKlientiSub.Form.Requery
End Sub

Private Sub btnClear_Click()
    Me.txtKlientaID = ""
    Me.txtVards = ""
    Me.txtUzvards = ""
    Me.txtEpasts = ""
    Me.txtTalrunis = ""
    Me.cboValsts = ""
    Me.cboNovads = ""
    Me.cboPilseta = ""
    Me.cboPagasts = ""
    Me.txtPastaIndekss = ""

    'fokuss uz LietotajaID lauku
    Me.txtKlientaID.SetFocus
    'aktivizēt pogu labot
    Me.btnEdit.Enabled = True
    'samainīt nosaukumu pogai pievienot uz pievienot
    Me.btnAdd.Caption = "Pievienot"
    'notīrīt tagu LietotajaID priekš jauna
    Me.txtKlientaID.Tag = ""
End Sub

Private Sub btnDelete_Click()
    'Izdzēst ierakstu
    'Pārbaude eksistējošu izvēlētu ierakstu
    If Not (Me.frmKlientiSub.Form.Recordset.EOF And Me.frmKlientiSub.Form.Recordset.BOF) Then
        'apstirpināt dzēšanu
        If MsgBox("Vai esat droš ka vēlaties dzēst?", vbYesNo) = vbYes Then
            'dzēš tagad
            CurrentDb.Execute "DELETE FROM tblKlienti " & _
                    " WHERE KlientaID=" & Me.frmKlientiSub.Form.Recordset.Fields("KlientaID")
            'atsvaidzina datus sarakstā
            Me.frmKlientiSub.Form.Requery
        End If
    End If
End Sub

Private Sub btnEdit_Click()
    'pārbauda vai eksistē dati sarakstā
    If Not (Me.frmKlientiSub.Form.Recordset.EOF And Me.frmKlientiSub.Form.Recordset.BOF) Then
        'iegūst datus uz kontrol laukiem
        With Me.frmKlientiSub.Form.Recordset
            Me.txtKlientaID = .Fields("KlientaID")
            Me.txtVards = .Fields("Vards")
            Me.txtUzvards = .Fields("Uzvards")
            Me.txtEpasts = .Fields("Epasts")
            Me.txtTalrunis = .Fields("Talrunis")
            Me.cboValsts = .Fields("Valsts")
            Me.cboNovads = .Fields("Novads")
            Me.cboPilseta = .Fields("Pilseta")
            Me.cboPagasts = .Fields("Pagasts")
            Me.txtPastaIndekss = .Fields("PastaIndekss")
            
            'saglabā id lietotāja tagā txtLietotajaID ja id ir izmainījies
            'Me.txtKlientaID.Tag = .Fields("KlientaID")
            Me.txtKlientaID.Tag = .Fields("KlientaID")
            'samaina nosaukumu pogai pievienot uz atjaunot
            Me.btnAdd.Caption = "Atjaunot"
            'atslēdz pogu labot
            Me.btnEdit.Enabled = False
        End With
    End If
End Sub

 

 

Izvadi ar visu pieprasījumu, kādu tu taisies likt datu bāzē un pēc tam to manuāli izpildi iekš Access. Ja kāds no datu bāzes laukiem ir atzīmēts kā "not null" un dati būs tukši, tad protams, ka šādu ierakstu nevar ievietot.    Ieteiktu to notestēt gan ar insert, gan update, lai pārliecinātos, ka ar datiem un pieprasījumiem viss kārtībā.

 

Manuāli ievadīt var un nekur nestāv "not null", citā bāzē šāds kods strādā pieienošanai, šei nez kapēc nē... 

Link to comment
Share on other sites

Mezavecis

Kā tas ir manuāli? Ar pieprasījumu, kuru izdod minētā poga btnAdd_Click vai vai query designer? Mainīgais CurrentDb ir korekti inicializēts?

Link to comment
Share on other sites

 

 

Kā tas ir manuāli? Ar pieprasījumu, kuru izdod minētā poga btnAdd_Click vai vai query designer? Mainīgais CurrentDb ir korekti inicializēts?

 

Manuāli es to sapratu, vai tos pašus datus varu ievadīt ar roku :) Neesu guru par access lietām (skolā darbu jātaisa ms access bāzi) , tapēc īsti nemācēšu atbildēt uz Tavu jautājumu par CurrentDb, šādu pogu ar tādu kodu arī izveidoju citai tabulai, kur viss strādā, bet nevaru saprast kapēc šajā nestrādā :( 

Link to comment
Share on other sites

Mezavecis

Ja nav šādas rindas, tad pieprasījums pilnīgi un noteikti nestrādās. Paskaties kārtīgāk to strādājošo piemēru. Lai gan stipra aizdoma, ka formas lauks ir Me.txtKlientaID tukšs. 

  Set CurrentDb = OpenDatabase("superpuperdatabase.mdb")

http://msdn.microsoft.com/en-us/library/bb208861%28v=office.12%29.aspx

Link to comment
Share on other sites

Ja nav šādas rindas, tad pieprasījums pilnīgi un noteikti nestrādās. Paskaties kārtīgāk to strādājošo piemēru. Lai gan stipra aizdoma, ka formas lauks ir Me.txtKlientaID tukšs.  Set CurrentDb = OpenDatabase("superpuperdatabase.mdb") http://msdn.microsof...office.12).aspx

 

 

 

Kods no strādājoša : 

<spoiler>

Option Compare Database

Private Sub btnAdd_Click()
    'kad spiežam uz pogas Pievienot tur ir divas opcijas
    '1. Pievienot
    '2. Atjaunot
    If Me.txtLietotajaID.Tag & "" = "" Then
        'tas ir priekš pievienot jaunu
        'pievienot datus tabulai
        CurrentDb.Execute "INSERT INTO tblLietotaji(LietotajaID, Lietotajs, UserLogin, Password, Loma) " & _
                "VALUES(" & Me.txtLietotajaID & ",'" & Me.txtLietotajs & "','" & _
                Me.txtUserLogin & "','" & Me.txtPassword & "','" & Me.txtLoma & "')"
    Else
        'citādāk (Tag no LietotajaID glabā id no lietotāja kas būs jāmaina)
        CurrentDb.Execute "UPDATE tblLietotaji " & _
                " SET LietotajaID=" & Me.txtLietotajaID & _
                ", Lietotajs='" & Me.txtLietotajs & "'" & _
                ", UserLogin='" & Me.txtUserLogin & "'" & _
                ", Password='" & Me.txtPassword & "'" & _
                ", Loma='" & Me.txtLoma & "'" & _
                " WHERE LietotajaID=" & Me.txtLietotajaID.Tag
    End If
    
                
    'attīrīt formu
    btnClear_Click
    'atsvaidzina datus formā
    frmLietotajiSub.Form.Requery
End Sub

Private Sub btnClear_Click()
    Me.txtLietotajaID = ""
    Me.txtLietotajs = ""
    Me.txtUserLogin = ""
    Me.txtPassword = ""
    Me.txtLoma = ""

    'fokuss uz LietotajaID lauku
    Me.txtLietotajaID.SetFocus
    'aktivizēt pogu labot
    Me.btnEdit.Enabled = True
    'samainīt nosaukumu pogai pievienot uz pievienot
    Me.btnAdd.Caption = "Pievienot"
    'notīrīt tagu LietotajaID priekš jauna
    Me.txtLietotajaID.Tag = ""
End Sub

Private Sub btnDelete_Click()
    'Izdzēst ierakstu
    'Pārbaude eksistējošu izvēlētu ierakstu
    If Not (Me.frmLietotajiSub.Form.Recordset.EOF And Me.frmLietotajiSub.Form.Recordset.BOF) Then
        'apstirpināt dzēšanu
        If MsgBox("Vai esat droš ka vēlaties dzēst?", vbYesNo) = vbYes Then
            'dzēš tagad
            CurrentDb.Execute "DELETE FROM tblLietotaji " & _
                    " WHERE LietotajaID=" & Me.frmLietotajiSub.Form.Recordset.Fields("LietotajaID")
            'atsvaidzina datus sarakstā
            Me.frmLietotajiSub.Form.Requery
        End If
    End If
End Sub

Private Sub btnEdit_Click()
    'pārbauda vai eksistē dati sarakstā
    If Not (Me.frmLietotajiSub.Form.Recordset.EOF And Me.frmLietotajiSub.Form.Recordset.BOF) Then
        'iegūst datus uz kontrol laukiem
        With Me.frmLietotajiSub.Form.Recordset
            Me.txtLietotajaID = .Fields("LietotajaID")
            Me.txtLietotajs = .Fields("Lietotajs")
            Me.txtUserLogin = .Fields("UserLogin")
            Me.txtPassword = .Fields("Password")
            Me.txtLoma = .Fields("Loma")
            'saglabā id lietotāja tagā txtLietotajaID ja id ir izmainījies
            Me.txtLietotajaID.Tag = .Fields("LietotajaID")
            'samaina nosaukumu pogai pievienot uz atjaunot
            Me.btnAdd.Caption = "Atjaunot"
            'atslēdz pogu labot
            Me.btnEdit.Enabled = False
        End With
    End If
End Sub

Private Sub btnExit_Click()
    DoCmd.Close
    DoCmd.OpenForm "frmNavigacija"
End Sub

</spoiler>

Kods kur nestrādā :

Option Compare Database

Private Sub btnExit_Click()
DoCmd.Close
DoCmd.OpenForm "frmNavigacija"
End Sub

Private Sub btnAdd_Click()
    'kad spiežam uz pogas Pievienot tur ir divas opcijas
    '1. Pievienot
    '2. Atjaunot
    If Me.txtKlientaID.Tag & "" = "" Then
        'tas ir priekš pievienot jaunu
        'pievienot datus tabulai
        CurrentDb.Execute "INSERT INTO tblKlienti(KlientaID, Vards, Uzvards, Epasts, Talrunis, Valsts, Novads, Pilseta, Pagasts, PastaIndekss) " & _
                "VALUES(" & Me.txtKlientaID & ",'" & Me.txtVards & "','" & _
                Me.txtUzvards & "','" & Me.txtEpasts & "','" & _
                Me.txtTalrunis & "','" & Me.cboValsts & "','" & _
                Me.cboNovads & "','" & Me.cboPilseta & "','" & _
                Me.cboPagasts & "','" & Me.txtPastaIndekss & "')"
    Else
        'citādāk (Tag no KlientaID glabā id no lietotāja kas būs jāmaina)
        CurrentDb.Execute "UPDATE tblKlienti " & _
                " SET KlientaID=" & Me.txtKlientaID & _
                ", Vards='" & Me.txtVards & "'" & _
                ", Uzvards='" & Me.txtUzvards & "'" & _
                ", Epasts='" & Me.txtEpasts & "'" & _
                ", Talrunis='" & Me.txtTalrunis & "'" & _
                ", Valsts='" & Me.cboValsts & "'" & _
                ", Novads='" & Me.cboNovads & "'" & _
                ", Pilseta='" & Me.cboPilseta & "'" & _
                ", Pagasts='" & Me.cboPagasts & "'" & _
                ", PastaIndekss='" & Me.txtPastaIndekss & "'" & _
                " WHERE KlientaID=" & Me.txtKlientaID.Tag
    End If
    '

    'attīrīt formu
    btnClear_Click
    'atsvaidzina datus formā
    frmKlientiSub.Form.Requery
End Sub

Private Sub btnClear_Click()
    Me.txtKlientaID = ""
    Me.txtVards = ""
    Me.txtUzvards = ""
    Me.txtEpasts = ""
    Me.txtTalrunis = ""
    Me.cboValsts = ""
    Me.cboNovads = ""
    Me.cboPilseta = ""
    Me.cboPagasts = ""
    Me.txtPastaIndekss = ""

    'fokuss uz LietotajaID lauku
    Me.txtKlientaID.SetFocus
    'aktivizēt pogu labot
    Me.btnEdit.Enabled = True
    'samainīt nosaukumu pogai pievienot uz pievienot
    Me.btnAdd.Caption = "Pievienot"
    'notīrīt tagu LietotajaID priekš jauna
    Me.txtKlientaID.Tag = ""
End Sub

Private Sub btnDelete_Click()
    'Izdzēst ierakstu
    'Pārbaude eksistējošu izvēlētu ierakstu
    If Not (Me.frmKlientiSub.Form.Recordset.EOF And Me.frmKlientiSub.Form.Recordset.BOF) Then
        'apstirpināt dzēšanu
        If MsgBox("Vai esat droš ka vēlaties dzēst?", vbYesNo) = vbYes Then
            'dzēš tagad
            CurrentDb.Execute "DELETE FROM tblKlienti " & _
                    " WHERE KlientaID=" & Me.frmKlientiSub.Form.Recordset.Fields("KlientaID")
            'atsvaidzina datus sarakstā
            Me.frmKlientiSub.Form.Requery
        End If
    End If
End Sub

Private Sub btnEdit_Click()
    'pārbauda vai eksistē dati sarakstā
    If Not (Me.frmKlientiSub.Form.Recordset.EOF And Me.frmKlientiSub.Form.Recordset.BOF) Then
        'iegūst datus uz kontrol laukiem
        With Me.frmKlientiSub.Form.Recordset
            Me.txtKlientaID = .Fields("KlientaID")
            Me.txtVards = .Fields("Vards")
            Me.txtUzvards = .Fields("Uzvards")
            Me.txtEpasts = .Fields("Epasts")
            Me.txtTalrunis = .Fields("Talrunis")
            Me.cboValsts = .Fields("Valsts")
            Me.cboNovads = .Fields("Novads")
            Me.cboPilseta = .Fields("Pilseta")
            Me.cboPagasts = .Fields("Pagasts")
            Me.txtPastaIndekss = .Fields("PastaIndekss")
            
            'saglabā id lietotāja tagā txtLietotajaID ja id ir izmainījies
            'Me.txtKlientaID.Tag = .Fields("KlientaID")
            Me.txtKlientaID.Tag = .Fields("KlientaID")
            'samaina nosaukumu pogai pievienot uz atjaunot
            Me.btnAdd.Caption = "Atjaunot"
            'atslēdz pogu labot
            Me.btnEdit.Enabled = False
        End With
    End If
End Sub

Private Sub Detail_Click()

End Sub

Nevaru atrast atšķirību

Link to comment
Share on other sites

Mezavecis

Es negribu iet un salīdzināt tos palagus :) Izvadi konsolē visus pieprasījumus un tad salīdzini. Respektīvi output no šiem te. Ņem vērā, ka pēc šādas metodes, ja adrese vai kāds cits lauks saturēs pēdiņas, tad viss pieprasījums tiks sačakarēts, tāpēc nedrīkst pieprasījumus brīvā teksta laukiem lipināt kopā.  

INSERT INTO tblKlienti(KlientaID, Vards, Uzvards, Epasts, Talrunis, Valsts, Novads, Pilseta, Pagasts, PastaIndekss) " & _
                "VALUES(" & Me.txtKlientaID & ",'" & Me.txtVards & "','" & _
                Me.txtUzvards & "','" & Me.txtEpasts & "','" & _
                Me.txtTalrunis & "','" & Me.cboValsts & "','" & _
                Me.cboNovads & "','" & Me.cboPilseta & "','" & _
                Me.cboPagasts & "','" & Me.txtPastaIndekss & "')"
Link to comment
Share on other sites

_dunduks_

Kāpēc šajā rindā vajag pēdiņas un '&' zīme?

If Me.txtKlientaID.Tag & "" = "" Then

 

varbūt vienkārši šādi:

 

If Me.txtKlientaID.Tag = "" Then

Labots - _dunduks_
Link to comment
Share on other sites

 

 

varbūt vienkārši šādi:   If Me.txtKlientaID.Tag = "" Then
 

 

Pamainīju kā teici, kļūdu nemet spiežot pogu, bet joprojām dati neievadās tabulā, nospiežu pievieot norefrešojās subforma un dati klāt nav nākuši

Link to comment
Share on other sites

  • 2 weeks later...

Brīvdienas pagājušas un problēma atrisināta, ja kādam interesē tad problēma bija ar combo box. Combo box saglabāja izvēlētās vērtības ID nummuru nevis pašu vērtību un līdz ar to tādu ierakstu nevarēja saglabāt jo citā tabulā ar ko ir saites neļāva to izdarīt, jo bija nepieciešamas konkrētās vērtības.

Link to comment
Share on other sites

Iepriekšējos palagus nelasīju, bet datubāzē kā atslēgas ir jāglabā tieši ID, nevis vērtības.

Ko darīsi, kad vajadzēs izmainīt klienta/preces/whatever nosaukumu?

Ko darīsi, ja būs vairāki Jāņi Bērziņi?

Link to comment
Share on other sites

Katram Jānim Bērziņam būs savs ID, par combo box ko rakstīju ir tā kā ar query dati, piemēram, kā pilsēta, valsts utt tiek ņemts no citas tabulas un saglabāja ne pilsētas nosaukumu vai valsti, bet tās ID nummuru, kas ir nepareizi šajā gadījumā. 

Link to comment
Share on other sites

Pats gudrs. Nu labi.

Atceries tikai, ka gan pilsētas, gan arī valstis var pārdēvēt.

Un tad nāksies rakstīt koda gabalu, kas visās vietās pārrakstīs veco nosaukumu ar jauno.

 

Edīte: iemācies, lūdzu, izteikt savas domas strukturēti, - tā, lai citiem vieglāk saprast, - palīdzēs arī kodu rakstot...

Labots - Xirx
Link to comment
Share on other sites

Guest
Slēgta tēma, pievienot komentāru nav iespējams.
 Share

×
×
  • Izveidot jaunu...