[VBA/Access2003] MsgBox ipv waarschuwing

Pagina: 1
Acties:
  • 146 views sinds 30-01-2008
  • Reageer

  • Gulf_5
  • Registratie: Maart 2004
  • Laatst online: 20-10-2024

Gulf_5

Lucht-v/w-aardig

Topicstarter
Het volgende is het geval, ik wil een soort security inbouwen in een access file.
Ik heb een access bestand waarin gegevens uit een text bestand wordt geimporteerd (zie een van mijn vorige topics, voor meer informatie, het gaat over hetzelfde bestand).

Als gegevens worden geimporteerd die er al staan, dan geeft Access (zoals het hoort) de volgende message:

Microsoft Office Access was unable to append all the data to the table.
The contents of fields in 0 record(s) were deleted, and 135 record(s) were lost due to key violations.
*[knip]*
Do you want to proceed anyway?
[ YES ] [ NO ] [CANCEL]


Omdat het hier gaat om een fout die komt doordat een file al geimporteerd is, moet het bronbestand gecontroleerd worden. Het bronbestand wordt namelijk door een voorgaande procedure steeds aangepast, het kan zijn dat die voorgaande procedure fout is gegaan of gewoon vergeten is.

In plaats van bovenstaande message wil ik dus een andere MsgBox hebben, waarin wordt gesteld dat men de sourcefile moet controleren, of opnieuw de procedure moet doorlopen oid.

Ik heb al geprobeerd te zoeken op oplossingen voor error messages, maar het gaat hier niet echt om een error. Onderstaande code geprobeerd, maar dat werkt dus ook niet. (Geen foutmelding: logisch, omdat er geen error is)

hoop dat bovenstaande duidelijk is
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
'DoCmd.SetWarnings False
    If MsgBox("Do you want to start import procedure for KANA response?", vbYesNo, "Start KANA import Procedure") = vbYes Then
        GoTo Macrovervolg1
        Else
End If

Macrovervolg1:
    DoCmd.TransferText acImportDelim, "processimport", "KANA import from txt", "\\cyg7006\data\p&r\Reporting\Data_Sources\KANA_Response\Weekly\process\process.txt", False, ""
    'if errormessage
    On Error GoTo Error_handling:
   
    MsgBox "Importing Successfully completed, program to be terminated", vbOKOnly, "Success"

Error_handling: MsgBox "Check your sourcefile"

[ Voor 20% gewijzigd door Gulf_5 op 28-12-2005 11:55 ]

iets met foto's...


Verwijderd

Ik begrijp het niet helemaal. Als je import fout gegaan is, dan krijg je de foutmelding? Maar als ik logisch nadenk, dan is dat omdat de gegevens al geimporteerd zijn... little confused, kan aan mij liggen.

Je kan met ADO/DAO controleren of een entry al bestaat lijkt mij? Dit kan je ook gebruiken wellicht.

Verder zou ik geen goto gebruiken. Maak een public function of sub aan waarin je de errortrapping afhandeld. Je code zou dan meer zo er uit zien;

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
'DoCmd.SetWarnings False 

On Error Call [hier naam van de errortrap sub/function]

    If MsgBox("Do you want to start import procedure for KANA response?", vbYesNo, "Start KANA import Procedure") = vbNo then
        End Sub
    End if

    DoCmd.TransferText acImportDelim, "processimport", "KANA import from txt", "\\cyg7006\data\p&r\Reporting\Data_Sources\KANA_Response\Weekly\process\process.txt", False, "" 
    
    MsgBox "Importing Successfully completed, program to be terminated", vbOKOnly, "Success" 


Verder ontgaat mij even waarom je de vraag blijft loopen, je blijft in jouw code hangen. Dit heb ik ook zodanig aangepast zoals ik het zou doen.

Ook zou ik in de vraag een vbQuestion toevoegen en bij de melding 'Importing...' een vbInformation (inzake GUI design...).

Verwijderd

DoCmd.SetWarnings False

  • Gulf_5
  • Registratie: Maart 2004
  • Laatst online: 20-10-2024

Gulf_5

Lucht-v/w-aardig

Topicstarter
hmmm... als ik jullie replies zo lees, dan schort er eea aan mijn uitleg:
in de herkansing dan maar :+

het gaat om een procedure die wekelijks plaatsvind op maandagochtend, maar als iemand vergeten is de voorbereidingsprocedure te volgen, dan is het bronbestand nog vol met gegevens van de vorige week. In dat geval komt Access met de genoemde foutmelding. In plaats van die foutmelding, die voor de user nietszeggend is, wil ik een MsgBox hebben. (en als dat niet mogelijk is dan een IF functie oid waarmee de MsgBox na de foutmelding komt)

aantal puntjes:
- dit is dus geen foutmelding, maar een notificatie ofzo
- (@ Heretic:) ik wil dus WEL een melding krijgen (dus DoCmd.SetWarnings = False staat niet voor niets gedeactiveerd, had m al staan enzo ;))

En nee, de macro loopt niet:
1) de vraag of je wil importeren, JA / NEE
JA = importeren, vraag 3
NEE = vraag 2
2) wil je het bestand uberhaupt gebruiken ? JA / NEE
JA = Exit Sub
NEE = Exit application
3) wil je het bestand nog gebruiken na het importeren ? JA / NEE
JA = Exit Sub
NEE = Exit application
(N.B. ik hoor jullie al zeggen "staat niet in de code"... klopt :) maar dat gedeelte werkt gewoon, daar gaat t hier niet om, dus heb ik dat weggelaten)

De foutmelding (die imo eerder een notificatie is...) komt idd omdat data al geimporteerd is, maar daar gaat het juist om, er moet NIEUWE data geimporteerd worden, dus OF men is dubbel aan t doen, en moet gewaarschuwd worden, OF de data is nog niet up-to-date -> dat moet dus snel gebeuren...

Hoop dat t zo duidelijker is...

ow enne:
@ Trancer_2k3: weet aardig wat afkortingen enzo, maar bij ADO/DAO gaat er geen lampje branden. Ben ik slachtoffer van geheugenverlies, heb ik een blackout, komt deze vaak voor, of ben ik gewoon een kneus |:( dat ik deze niet weet ... ;)

[ Voor 8% gewijzigd door Gulf_5 op 28-12-2005 13:44 ]

iets met foto's...


Verwijderd

Gulf_5 schreef op woensdag 28 december 2005 @ 13:40:
hmmm... als ik jullie replies zo lees, dan schort er eea aan mijn uitleg:
in de herkansing dan maar :+

het gaat om een procedure die wekelijks plaatsvind op maandagochtend, maar als iemand vergeten is de voorbereidingsprocedure te volgen, dan is het bronbestand nog vol met gegevens van de vorige week. In dat geval komt Access met de genoemde foutmelding. In plaats van die foutmelding, die voor de user nietszeggend is, wil ik een MsgBox hebben. (en als dat niet mogelijk is dan een IF functie oid waarmee de MsgBox na de foutmelding komt)

aantal puntjes:
- dit is dus geen foutmelding, maar een notificatie ofzo
- (@ Heretic:) ik wil dus WEL een melding krijgen (dus DoCmd.SetWarnings = False staat niet voor niets gedeactiveerd, had m al staan enzo ;))

En nee, de macro loopt niet:
1) de vraag of je wil importeren, JA / NEE
JA = importeren, vraag 3
NEE = vraag 2
2) wil je het bestand uberhaupt gebruiken ? JA / NEE
JA = Exit Sub
NEE = Exit application
3) wil je het bestand nog gebruiken na het importeren ? JA / NEE
JA = Exit Sub
NEE = Exit application
(N.B. ik hoor jullie al zeggen "staat niet in de code"... klopt :) maar dat gedeelte werkt gewoon, daar gaat t hier niet om, dus heb ik dat weggelaten)

De foutmelding (die imo eerder een notificatie is...) komt idd omdat data al geimporteerd is, maar daar gaat het juist om, er moet NIEUWE data geimporteerd worden, dus OF men is dubbel aan t doen, en moet gewaarschuwd worden, OF de data is nog niet up-to-date -> dat moet dus snel gebeuren...

Hoop dat t zo duidelijker is...

ow enne:
@ Trancer_2k3: weet aardig wat afkortingen enzo, maar bij ADO/DAO gaat er geen lampje branden. Ben ik slachtoffer van geheugenverlies, heb ik een blackout, komt deze vaak voor, of ben ik gewoon een kneus |:( dat ik deze niet weet ... ;)
OK... ADO; klik hier voor uitleg, voor DAO hier klikken (specifieke uitleg voor Word, maar DAO is voor Access ook te gebruiken). Overigens adviseer ik je ADO te gebruiken... Dat is antwoord één. 8)

Twee (kom ik toch weer op ADO/DAO terug); met DAO kan je op aanwezigheid van gegevens testen. Indien de gegevens bestaan, kan je met de data doen wat je wil. Voor alle zekerheid kan je dubbele data plaatsen in een ander bestand, waardoor je na de import met een schoon bestand weer kan beginnen. Je kan dan de gebruiker de inhoud van het oude bestand laten zien en dan laten kiezen om deze te bewaren of niet (niet > verwijderen). Omdat het onmogelijk is om 'even' uit te leggen wat ADO is, lijkt het mij verstandig om hier even via de link eerst meer te lezen. Hier staat ook wat info :P

Verwijderd

Gulf_5 schreef op woensdag 28 december 2005 @ 13:40:
- (@ Heretic:) ik wil dus WEL een melding krijgen (dus DoCmd.SetWarnings = False staat niet voor niets gedeactiveerd, had m al staan enzo ;))
je gaat het toch op false moeten zetten, tenzij je idd de dao/ado weg op gaat. na de import kun je toch controleren of de foutmeldingtabel bestaat waarin de key violation records geplaatst worden, en op basis daarvan melding geven dat het bronbestand nagekeken dient? er is ook nog de recordsaffected eigenschap van het query object.

  • PaulZ
  • Registratie: Augustus 2004
  • Laatst online: 13-08 21:01
Is het misschien makkelijker om het bronbestand te legen nadat het is verwerkt? Dan heb je al die trucken niet meer nodig...

Vlinders moet je volgen, niet vangen...


  • Gulf_5
  • Registratie: Maart 2004
  • Laatst online: 20-10-2024

Gulf_5

Lucht-v/w-aardig

Topicstarter
daar heb ik dus zelf ook aan zitten denken... maar dat vindt de opperchef hier geen goed plan... (waarom is me een raadsel, maar dat gebeurt dus niet :'()

[ Voor 3% gewijzigd door Gulf_5 op 28-12-2005 16:35 ]

iets met foto's...


  • PaulZ
  • Registratie: Augustus 2004
  • Laatst online: 13-08 21:01
Gewoon eerst backup maken van het bronbestand en dan legen. Dan heb je altijd het origineel nog om terug te zetten... Vraag het opperhoofd eens waarom die dat niet wil.

Vlinders moet je volgen, niet vangen...

Pagina: 1