| auteur : Gaël Donat | Ce n'est pas de tout repos.
Il existe un drivers Lotus SQL ODBC ( NotesSQL),vous pourrez lier une vue Lotus (car les objets sont considéré comme des vues) dans Access.
|
| auteur : Maxence HUBICHE | Livre référence : "Migrer votre base de données Access Vers SQL Server" de Marc Israël (ISBN : 2840824434)
|
| auteur : thorgal85 | Public Sub connect ()
Set Cnx = New ADODB. Connection
Cnx. ConnectionString = " Driver={SQL Server};server=NomServeur;UID=sa;PWD=;database=NomMDB "
Cnx. Open
If Cnx. State = adStateOpen Then
MsgBox " connection OK "
End If
End Sub
|
|
| auteur : Argyronet |
Private Declare Function OpenProcess Lib " kernel32 " (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As _
Long, ByVal dwlProcessID As Long) As Long
Private Declare Function GetExitCodeProcess Lib " kernel32 " (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function CloseHandle Lib " kernel32 " (ByVal hObject As Long) As Long
Private Const PROCESS_QUERY_INFORMATION = & H400
Private Const STATUS_PENDING = & H103&
Private Sub LancerProg (PathFilename As String )
Dim lhProcess As Long
Dim lProcessID As Long
Dim lpExitCode As Long
lProcessID = Shell (PathFilename, 1 )
lhProcess = OpenProcess (PROCESS_QUERY_INFORMATION, False , lProcessID)
Do
Call GetExitCodeProcess (lhProcess, lpExitCode)
DoEvents
Loop While lpExitCode = STATUS_PENDING
Call CloseHandle (lhProcess)
End Sub
|
|
lien : Comment forcer Access à attendre la fin d'un traitement avant de continuer ?
|
| auteur : Romain Puyfoulhoux | Vous trouverez une méthode possible dans le code source ci-dessous. La procédure KillApp() ferme le programme dont l'identifiant est passé en paramètre. Vous pouvez utiliser la valeur renvoyée par la fonction Shell().
La seule ligne contenue dans la procédure KillApp() a pour effet d'énumérer toutes les fenêtres ouvertes, et d'appeler pour chacune d'entre-elles la fonction CloseWindow().
La fonction CloseWindow() regarde si la fenêtre en cours appartient au processus que l'on doit fermer, et si elle contient un menu Système (menu qui apparaît quand on clique sur l'icône de la fenêtre). Si c'est le cas, elle ferme la fenêtre.
Insérez ce code dans un module standard: Private Declare Function EnumWindows Lib " user32 " (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib " user32 " (ByVal hwnd As Long, _
lpdwprocessid As Long) As Long
Private Declare Function PostMessage Lib " user32 " Alias " PostMessageA " (ByVal hwnd As Long, _
ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function GetWindowLong Lib " user32 " Alias " GetWindowLongA " (ByVal hwnd As Long, _
ByVal nIndex As Long) As Long
Private Const WM_CLOSE = & H10
Private Const GWL_STYLE = (- 16 )
Private Const WS_SYSMENU = & H80000
Private Function CloseWindow (ByVal hwnd As Long, ByVal hInstance As Long) As Long
Dim idproc As Long
idproc = 0
GetWindowThreadProcessId hwnd, idproc
If (idproc = hInstance) And ((GetWindowLong (hwnd, GWL_STYLE) And WS_SYSMENU) = WS_SYSMENU) Then
PostMessage hwnd, WM_CLOSE, 0 , 0
End If
CloseWindow = True
End Function
Public Sub KillApp (hInstance As Long)
EnumWindows AddressOf CloseWindow, hInstance
End Sub
|
Certains programmes n'acceptent pas d'être ouverts plusieurs fois en même temps. Pour cela, ils commencent par chercher si une instance du programme est déjà en mémoire. Si c'est le cas, ils terminent l'instance qui vient d'être créée,
et si une nouvelle fenêtre doit être ouverte, c'est l'ancienne instance qui le fait.
Avec ce code source vous ne pourrez donc pas, par exemple, fermer une fenêtre de l'explorateur Windows ouverte par Shell(),
car le processus dont l'id vous est renvoyé est automatiquement fermé, et la nouvelle fenêtre est ouverte par l'instance qui était déjà en mémoire.
|
lien : FAQ VB
lien : Comment ouvrir un fichier HTML, Word, PDF ou autre en utilisant l'exécutable associé ?
lien : Que faire quand l'API ShellExecute ne fonctionne pas ?
|
| auteur : Jean-Marc Rabilloud | Le code suivant est assez similaire à celui de la question précédente, la différence résidant dans le fait que vous ne connaissez pas l'identifiant du processus mais juste le titre de la fenêtre.
Ce code doit être placé dans un module standard. Le principe utilisé est celui d'une énumération à l'aide d'un callback classique :
la fonction EnumWindows énumère toutes les fenêtres ouvertes et appelle la fonction EnumCallback pour chacune d'entre elles.
Celle-ci ferme la fenêtre si son titre contient l'expression recherchée. Declare Function EnumWindows Lib " user32 " (ByVal wndenmprc As Long, ByVal lParam As Long) As Long
Declare Function GetWindowText Lib " user32 " Alias " GetWindowTextA " (ByVal hwnd As Long, _
ByVal lpString As String , _
ByVal cch As Long) As Long
Declare Function SendMessage Lib " user32 " Alias " SendMessageA " (ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Any) As Long
Public Const WM_CLOSE = & H10
Private AppCible As String
Public Function EnumCallback (ByVal app_hWnd As Long, ByVal param As Long) As Long
Dim buf As String * 256
Dim Titre As String
Dim Longueur As Long
Longueur = GetWindowText (app_hWnd, buf, Len (buf))
Titre = Left $(buf, Longueur)
If InStr (Titre, AppCible) < > 0 Then
SendMessage app_hWnd, WM_CLOSE, 0 , 0
End If
EnumCallback = 1
End Function
Public Sub KillApp (App_Cherchee As String )
AppCible = App_Cherchee
EnumWindows AddressOf EnumCallback, 0
End Sub
|
Un appel du type KillApp "Excel" fermera Microsoft Excel.
Attention d'éviter l'utilisation de termes trop simples pouvant se trouver dans le titre d'une fenêtre d'une autre application.
|
lien : FAQ VB
|
| auteur : Abelman | Copiez ce code dans un module standard : Public Declare Function CreateProcess Lib " kernel32 " Alias " CreateProcessA " _
(ByVal lpApplicationName As Long, ByVal lpCommandLine As String , _
ByVal lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, _
ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, _
ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As Long, _
lpStartupInfo As STARTUPINFO, _
lpProcessInformation As PROCESS_INFORMATION) As Long
Public Declare Function CloseHandle Lib " kernel32 " (ByVal hObject As Long) As Long
Public Declare Sub Sleep Lib " kernel32 " (ByVal dwMilliseconds As Long)
Public Declare Function GetExitCodeProcess Lib " kernel32 " (ByVal hProcess As Long, lpExitCode As Long) As Long
Type STARTUPINFO
cb As Long
lpReserved As String
lpDesktop As String
lpTitle As String
dwX As Long
dwY As Long
dwXSize As Long
dwYSize As Long
dwXCountChars As Long
dwYCountChars As Long
dwFillAttribute As Long
dwFlags As Long
wShowWindow As Integer
cbReserved2 As Integer
lpReserved2 As Long
hStdInput As Long
hStdOutput As Long
hStdError As Long
End Type
Type PROCESS_INFORMATION
hProcess As Long
hThread As Long
dwProcessID As Long
dwThreadID As Long
End Type
Public Const NORMAL_PRIORITY_CLASS = & H20&
Public Const STILL_ACTIVE = & H103&
Public Sub AttendreFinProcess (proc As PROCESS_INFORMATION, Optional timeout As Long = 60 )
Dim Ret As Long
Dim tms As Single
Dim exitcode As Long
tms = Timer
Ret = GetExitCodeProcess (proc. hProcess , exitcode)
Do While Ret < > 0 And exitcode = STILL_ACTIVE
Ret = GetExitCodeProcess (proc. hProcess , exitcode)
DoEvents
Sleep 100
If Timer - tms > timeout Then
Err . Raise STILL_ACTIVE, " AttendreFinProcess " , " Timeout sur l'attente de la fin d'un process "
End If
Loop
If Ret = 0 Then
Err . Raise Err . LastDllError , " AttendreFinProcess " , " Erreur systeme N° " & Err . LastDllError
End If
End Sub
Public Sub LancerProcess (sExe As String , proc As PROCESS_INFORMATION)
Dim start As STARTUPINFO
Dim Ret As Long
start. cb = Len (start)
Ret& = CreateProcess (0 & , sExe, 0 & , 0 & , 0 & , NORMAL_PRIORITY_CLASS, 0 & , 0 & , start, proc)
If Ret = 0 Then
Err . Raise Err . LastDllError , " LancerProcess " , " Erreur systeme N° " & Err . LastDllError
End If
End Sub
|
Créez une form et placez-y un bouton nommé Command1. Puis copiez ce code dans le module de la form : Private Sub Command1_Click ()
Dim proc As PROCESS_INFORMATION
On Error GoTo errortag
proc. hProcess = - 1
proc. hThread = - 1
Debug. Print " Debut du processus "
Call LancerProcess (" notepad " , proc)
Call AttendreFinProcess (proc)
Debug. Print " fin du processus "
Call CloseHandle (proc. hProcess )
Call CloseHandle (proc. hThread )
Exit Sub
errortag :
If proc. hProcess < > - 1 Then CloseHandle proc. hProcess
If proc. hThread < > - 1 Then CloseHandle proc. hThread
MsgBox Err . Number & " - " & Err . Description
End Sub
|
La fonction AttendreFinProcess() attend la fin d'un processus tant que le temps indiqué par le paramètre timeout n'est pas écoulé.
Executez le projet et cliquez sur le bouton de commande. Le Notepad se lance. Lorsque vous le fermez, la console de
débuggage affiche "fin du processus".
|
lien : FAQ VB
|
| auteur : Team Access |
Public Sub SendNotesMail (ByVal Subject As String , ByVal Attachment As String , _
ByVal Recipient As String , ByVal ccRecipient As String , _
ByVal bccRecipient As String , ByVal BodyText As String , _
ByVal SaveIt As Boolean, ByVal Password As String )
Dim Maildb As Object
Dim UserName As String
Dim MailDbName As String
Dim MailDoc As Object
Dim AttachME As Object
Dim Session As Object
Dim EmbedObj As Object
Set Session = CreateObject (" Notes.NotesSession " )
Session. Initialize (Password)
UserName = Session. UserName
MailDbName = Left $(UserName, 1 ) & Right $(UserName, (Len (UserName) - InStr (1 , UserName, " " ))) & " .nsf "
Set Maildb = Session. GETDATABASE (" " , MailDbName)
If Not Maildb. ISOPEN Then Maildb. OPENMAIL
Set MailDoc = Maildb. CREATEDOCUMENT
MailDoc. Form = " Memo "
MailDoc. sendto = Recipient
MailDoc. CopyTo = ccRecipient
MailDoc. BlindCopyTo = bccRecipient
MailDoc. Subject = Subject
MailDoc. Body = BodyText
MailDoc. SAVEMESSAGEONSEND = SaveIt
If Attachment < > " " Then
Set AttachME = MailDoc. CREATERICHTEXTITEM (" Attachment " )
Set EmbedObj = AttachME. EMBEDOBJECT (1454 , " " , Attachment, " Attachment " )
MailDoc. CREATERICHTEXTITEM (" Attachment " )
End If
MailDoc. PostedDate = Now ()
MailDoc. SEND 0 , Recipient
Set Maildb = Nothing
Set MailDoc = Nothing
Set AttachME = Nothing
Set Session = Nothing
Set EmbedObj = Nothing
End Sub
|
Il est aussi possible d'indiquer à Lotus Notes plusieurs destinataires en affectant un tableau de type Variant à la
propriété sendto : Dim recip (25 ) as Variant
recip (0 ) = " emailaddress1 "
recip (1 ) = " emailaddress2 "
maildoc. sendto = recip
|
|
lien : FAQ VB
|
| auteur : Papy Turbo |
Pour exécuter ce code il faut ajouter les références : Microsoft CDO for Windows 2000 Library et Microsoft ActiveX Data Objects 2.X Library
Option Compare Database
Option Explicit
Private Sub cmdEnvoyer_Click ()
CDOSendMail txtFrom, txtTo, txtSubject, txtBody, txtAttach
End Sub
Public Sub CDOSendMail (SendFrom As String , _
SendTo As String , _
Subject As String , _
PlainTextBody As String , _
FullPathFileName As String )
Dim cdoMail As CDO. Message
Dim iBp As CDO. IBodyPart
Dim iBp1 As CDO. IBodyPart
Dim Flds As ADODB. Fields
Dim Stm As ADODB. Stream
Set cdoMail = New CDO. Message
With cdoMail
. From = SendFrom
. To = SendTo
. Subject = Subject
Set iBp = cdoMail
Set iBp1 = iBp. AddBodyPart
Set Flds = iBp1. Fields
Flds (" urn:schemas:mailheader:content-type " ) = " text/plain; charset= " " iso-8859-1 " " "
Flds. Update
Set Stm = iBp1. GetDecodedContentStream
Stm. WriteText PlainTextBody
Stm. Flush
Set iBp1 = iBp. AddBodyPart
Set Flds = iBp1. Fields
Flds (" urn:schemas:mailheader:content-type " ) = " text/html "
Flds. Update
Set Stm = iBp1. GetDecodedContentStream
Stm. WriteText " <HTML><H1>this is some content for the body part object</H1></HTML> "
Stm. Flush
Set Flds = iBp. Fields
Flds (" urn:schemas:mailheader:content-type " ) = " multipart/alternative "
Flds. Update
. AddAttachment FullPathFileName
. Send
End With
End Sub
|
Cette solution marche avec Outlook express comme mail par défaut, à tester pour les autres services de messagerie.
|
lien : Le publipostage avec Access
|
| auteur : Romain Puyfoulhoux | Placez cette déclaration dans le module d'une form : Private Declare Function ShellExecute Lib " shell32.dll " Alias " ShellExecuteA " _
(ByVal hwnd As Long, ByVal lpOperation As String , ByVal lpFile As String , _
ByVal lpParameters As String , ByVal lpDirectory As String , ByVal nShowCmd As Long) As Long
|
La ligne suivante affiche le site Developpez.com dans le navigateur par défaut, en fournissant le répertoire de votre application comme répertoire par défaut : ShellExecute Me. hwnd , " open " , " http://www.developpez.com " , " " , CurrentProject. Path , 1
|
|
lien : FAQ VB
lien : Que faire quand l'API ShellExecute ne fonctionne pas ?
|
| auteur : Starec | Dans un premier temps déclarer une variable de type variant : Récupérer le résultat de la fonction ShellExecute (ne pas oublier les parenthèses) dans cette variable : Ret = ShellExecute (. . . . . )
msgbox Ret
|
Interpréter le résultat retourné en fonction de la liste suivante : 0 Le système manque de mémoire ou de ressources, l'exécutable est corrompu ou réallocations non valides.
2 Fichier non trouvé.
3 Chemin non trouvé.
5 Une tentative a été faite pour se lier dynamiquement à une tâche, ou il y a eu une erreur de partage ou de protection réseau.
6 La librairie requiert des segments de données séparés pour chaque tâche.
8 Il n'y a pas assez de mémoire disponible pour lancer l'application.
10 Version de Windows incorrecte.
11 Le fichier exécutable n'est pas correct, il se peut que ce ne soit pas une application Windows, ou qu'il y ait une erreur dans le fichier .EXE;
12 L'application a été conçue pour un autre système d'exploitation.
13 L'application a été conçue pour MS-DOS 4.0.
14 Le type de fichier exécutable est inconnu.
15 Tentative de chargement d'une application en mode réel.
16 Tentative de charger une seconde instance d'un fichier exécutable contenant plusieurs segments de données qui ne sont pas marqués en lecture seule.
19 Tentative de charger un fichier exécutable compressé, le fichier doit être décompressé avant d'être chargé.
20 Fichier de librairie liée dynamiquement (DLL) incorrect, une des DLLs requise pour exécuter cette application est corrompue.
21 L'application requiert les extensions Microsoft Windows 32-bit.
31 Il n'y a pas d'association avec le type de fichier spécifié, ou il n'y a pas d'association pour l'action choisie pour le type de fichier choisi
|
|
lien : Comment ouvrir un fichier HTML, Word, PDF ou autre en utilisant l'exécutable associé ?
|
Consultez les autres F.A.Q's
Les sources présentés sur cette pages sont libre de droits,
et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.
Copyright ©2004
Developpez LLC. Tout droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de
l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans
de prison et jusqu'à 300 000 E de dommages et intérets.
Cette page est déposée à la SACD.
|