Discussion:
Exe? ;-)
(zu alt für eine Antwort)
Sönke Petersen
2004-04-05 14:34:49 UTC
Permalink
Für alle, die auch Kunden haben, die verzweifelt nach einer Exe im
Programmverzeichnis suchen, unten ein kleines VC++-Programm von mir, das
keine MFC, msvbvm60.dll, etc. benötigt. Es ruft einfach die Access-RT mit
der gewünschten DB auf und übergibt Parameter per /cmd an Access.

Vielen Grüße...an die alten Bekannten
Sönke


// Sorry, sieht ohne Tabulatoren etwas wirr aus...

#include "stdafx.h"
#include <shellapi.h>
#include <winreg.h>
#include <stdlib.h>

const char DBName[20] = "server.kyy"; //// Hier Namen der Datenbank
eintragen, die geöffnet werden soll (muss im selben Verzeichnis liegen!)

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow )
{
HKEY pKey;
int success = 0;
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Shared
Tools\\MSACCESS80", 0, KEY_ALL_ACCESS, &pKey)
== ERROR_SUCCESS)
{
success = 1;
}
else if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Shared
Tools\\MSACCESS80RT", 0, KEY_ALL_ACCESS, &pKey)
== ERROR_SUCCESS)
{
success = 1;
}
if (success)
{
unsigned char value[256];
unsigned long* ValueType = 0;
unsigned long dw = 256;
RegQueryValueExA(pKey, "Path", 0, ValueType, value, &dw);
RegCloseKey(pKey);

char dir[255];
char file[500];
char* pfile;

GetModuleFileName(NULL, dir, 255);
for (int i = strlen(dir) - 1; i>0; i--)
{
if (dir[i] == 92)
{
dir[i] = 0;
i = 0;
}
else
dir[i] = 0;
}

strcpy(file, "/runtime /wrkgrp \"");
pfile = strcat(file, dir);
pfile = strcat(pfile, "\\system.mdw\" \"");
pfile = strcat(file, dir);
pfile = strcat(pfile, "\\");
pfile = strcat(pfile, DBName);
pfile = strcat(pfile, "\"");
if (strlen(lpCmdLine) > 0)
{
pfile = strcat(pfile, " /cmd ");
pfile = strcat(pfile, lpCmdLine);
}

if ((long)ShellExecuteA (0, "Open", reinterpret_cast<const char
*>(&value), pfile ,"C:\\", 1) <= 32)
MessageBox(0, "Access-Runtime-Umgebung nicht gefunden!", "Fehler", 0);
}
else
{
MessageBox(0, "Access-Runtime-Umgebung nicht gefunden!", "Fehler", 0);
}

return 0;
}
Ralf Pfeifer
2004-04-05 16:54:52 UTC
Permalink
Post by Sönke Petersen
Für alle, die auch Kunden haben, die verzweifelt nach einer Exe im
Programmverzeichnis suchen, unten ein kleines VC++-Programm von mir, das
keine MFC, msvbvm60.dll, etc. benötigt. Es ruft einfach die Access-RT mit
der gewünschten DB auf und übergibt Parameter per /cmd an Access.
Ich kann kürzer:

AccessPfad = """" & CreateObject("Access.Application").SysCmd(9) & "MSACCESS.EXE"""

Gruß, Ralf.
--
www.ArsTechnica.de --- www.ArsMartialis.com
Tobias Schirdewan
2004-04-05 18:29:12 UTC
Permalink
Post by Ralf Pfeifer
AccessPfad = """" & CreateObject("Access.Application").SysCmd(9) & "MSACCESS.EXE"""
Und wir wissen doch alle, daß es auf die Länge nicht ankommt - die Technik
macht's!
;-)

Grüße
Tobias
Sönke Petersen
2004-04-05 19:58:49 UTC
Permalink
Post by Ralf Pfeifer
Post by Sönke Petersen
Für alle, die auch Kunden haben, die verzweifelt nach einer Exe im
Programmverzeichnis suchen, unten ein kleines VC++-Programm von mir, das
keine MFC, msvbvm60.dll, etc. benötigt. Es ruft einfach die Access-RT mit
der gewünschten DB auf und übergibt Parameter per /cmd an Access.
AccessPfad = """" & CreateObject("Access.Application").SysCmd(9) & "MSACCESS.EXE"""
Ich glaub, Du hast nicht verstanden, was ich meinte. Noch mal durchlesen.

Gruß
Sönke
Ralf Pfeifer
2004-04-05 20:49:50 UTC
Permalink
Post by Ralf Pfeifer
Post by Ralf Pfeifer
AccessPfad = """" & CreateObject("Access.Application").SysCmd(9) &
"MSACCESS.EXE"""
Ich glaub, Du hast nicht verstanden, was ich meinte. Noch mal durchlesen.
OK, gemacht.

1. Du suchst die Progarmmdatei einer lauffähigen Access Version
2. Du möchtest ihr einen Dateinamen übergeben
3. Du möchtest den Parameter /cmd anhängen, um Makros nach Wahl
zu starten.

So habe ich das verstanden - und dann wäre 1 der wirklich kniffelige
Schritt, den ich für vergleichbare Probleme auf meiner Homepage
dargestellt habe (www.ArsTechnica.de).

Dort geht es darum, MDB's mit Access per VBS auf der ganzen Festplatte
zu suchen und reihenweise zu komprimieren.


Oder was meinst Du?


Gruß, Ralf.
--
www.ArsTechnica.de --- www.ArsMartialis.com
Lutz Uhlmann
2004-04-06 10:18:38 UTC
Permalink
Post by Ralf Pfeifer
OK, gemacht.
1. Du suchst die Progarmmdatei einer lauffähigen Access Version
2. Du möchtest ihr einen Dateinamen übergeben
3. Du möchtest den Parameter /cmd anhängen, um Makros nach Wahl
zu starten.
So habe ich das verstanden ...
Fast richtig ... aber trotzdem daneben denke ich ...

Er stellt eine EXE zur Verfügung, die ne MDB im selben Verzeichnis startet.
Und das, weil User meist lieber auf ne EXE klicken als auf ne MDB um ein
"Programm" zu starten ...

MhG Lutz
Wolfgang Kaiser
2004-04-06 06:17:40 UTC
Permalink
Hallo,

ich könnte diese Geschichte sehr gut gebrauchen, habe aber keine Ahnung von
C++.

Ich habe Developer Studio mit C++ 4.2 - kann ich damit Deinen Code
zusammenbauen?

Viele Gruesse,

Wolfgang
Post by Sönke Petersen
Für alle, die auch Kunden haben, die verzweifelt nach einer Exe im
Programmverzeichnis suchen, unten ein kleines VC++-Programm von mir, das
keine MFC, msvbvm60.dll, etc. benötigt. Es ruft einfach die Access-RT mit
der gewünschten DB auf und übergibt Parameter per /cmd an Access.
Sönke Petersen
2004-04-06 09:30:23 UTC
Permalink
Hallo Wolfgang!
Post by Wolfgang Kaiser
ich könnte diese Geschichte sehr gut gebrauchen, habe aber keine Ahnung von
C++.
Ich habe Developer Studio mit C++ 4.2 - kann ich damit Deinen Code
zusammenbauen?
Meinst Du Visual Studio? Weiß ich auch nicht so genau, probiers einfach mal
aus. Ich habs mit Microsoft Visual C++ 6.0 compiliert.

Viele Grüße
Sönke
Wolfgang Kaiser
2004-04-06 10:06:34 UTC
Permalink
Hallo Sönke,
Post by Sönke Petersen
Meinst Du Visual Studio? Weiß ich auch nicht so genau, probiers einfach mal
Nein, Developer Studio. Das beinhaltet - glaube ich - MS Visual C++. Beim
ausführen kommen aber nur Fehlermeldungen, mit denen ich nichts anfangen
kann.

"... die NTVDM-CPU hat einen ungültigen Befehl entdeckt. CS:06c0 IP:0103
OP:63 6c 75 84 65 ..."

Schade. wäre ganz nett gewsen, aber dann geht es auch so!

Danke trotzdem!

Wolfgang
Sascha Wostmann
2004-04-06 20:12:37 UTC
Permalink
Post by Sönke Petersen
Für alle, die auch Kunden haben, die verzweifelt nach einer Exe im
Programmverzeichnis suchen, unten ein kleines VC++-Programm von mir, das
...

in Hinblick auf aktuelle Würmer würde ich einfach die MDB umbenennen
in:

"Anwendung.exe .mdb"



SCNR!

Viele Grüße,
Sascha Wostmann
--
wichtige Informationsquellen zu Access: +----------------------
http://www.donkarl.com/ (FAQ) | Bitte keine Kopien
http://www.freeaccess.de/ (KnowHow) | oder Access-Anfragen
http://www.google.de/ (Suchmaschine) | per E-Mail.
Sönke Petersen
2004-04-07 12:14:51 UTC
Permalink
Post by Sascha Wostmann
in Hinblick auf aktuelle Würmer würde ich einfach die MDB umbenennen
"Anwendung.exe .mdb"
Find die Idee gar nicht schlecht. Nur wenn mehrere Access-Versionen
installiert sind, ist sone Exe echt praktisch. Sonst wird nämlich mit
Doppelklick auf die MDB im seltensten Fall die richtige Access-Version
gestartet.

Gruß
Sönke

Loading...