Jump to content


This is a ready-only archive of the InstallSite Forum. You cannot post any new content here. / Dies ist ein Archiv des InstallSite Forums. Hier können keine neuen Beiträge veröffentlicht werden.
Photo

SQL Statements


7 replies to this topic

Spitfyr

Spitfyr
  • Full Members
  • 162 posts

Posted 03 March 2006 - 10:52

Hallo,
ich will im Dialog "LicenseAgreement" eine Lizenzdatei anzeigen die von Anwender zu Anwender varieren kann. Beim Erstellen der Installation wird ja die RTF Datei einfach in das Feld (in der Tabelle Control in das Feld Text) kopiert und bei der Installation angezeigt.
Kann man während der Inatalltion zu Laufzeit den angezeigten Text ändern. Ich habe schon Hinweise gefunden, dass man per SQL die Feldinhalte ändern kann. Ich bekomme aber immer den Hinweis Bad Query.

Das ist mein Test String:
svSQL = "UPDATE Control SET [Control].Text = \"xxxxxx\" WHERE (
([Control].Dialog_ = \"LicenseAgreement\") AND
([Control].Control=\"Memo\") );";
XXXXX ist mein Teststring

Ruft man den SQL String dann mit MsiDatabaseOpenView (aus dem Install-Skript heraus)oder einem anderen MSI Befehl auf um die Daten zu ändern.

Grüße
Dietmar




PS: Oder kann man einen variablen Lizbeztext auch anders anzeigen.

Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 03 March 2006 - 14:27

Wie du schon weisst müsstest du dazu den RTF Quelltext in die Zelle füllen. Ich weiss nicht ob das schon jemand geschafft hat. Jedenfalls kannst du aus einer Custom Action nur TEMPORARY Änderungen machen, und meist auch nur Zeilen hiunzufügen, aber nicht die in der MSI Datei entahltenen zeilen ändern. D.h. du müsstest das ScrollableText Control zur Laufzeit temporär hinzufügen und mit RTF Inhalt befüllen.

Ich weiss ja nicht was genau du machen willst, aber wenn es sich um eine endliche Anzahl von alternativen texten handelt kannst du mehrere RTF Control übereinanderlegen (eines pro Text) und über eine geeignete Condition jeweils eines davon sichtbar machen.

Spitfyr

Spitfyr
  • Full Members
  • 162 posts

Posted 03 March 2006 - 15:35

Wir erstellen ein Produkt für unsere Kunden (die sind aber nur "Zwischenhändler"). Diese erstellen dann ggf. eine eigene Lizenzdatei und packen diese mit auf das Installationsmedium. Nun soll im Lizenzdialog die jeweilige Lizenzdatei des entsprechenden "Zwischenhändlers" angezeigt werden.

Gibt es andere Möglichkeiten sich in einem Dialog zur Laufzeit Text anzeigen zu lassen, der sich in einer Datei auf dem Medium befindet?


Spitfyr

Spitfyr
  • Full Members
  • 162 posts

Posted 06 March 2006 - 11:52

PS:
Wie ist der Aufruf, wenn ich per Skript einen Wert in der MSI ändern will?


z.B. MsiDatabaseOpenView(ISMSI_HANDLE,svSQL,hView) ....und zum Ändern?


mfg
Dietmar

Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 06 March 2006 - 16:33

Ja, sowas in der Richtung. Schau dir mal die Beispielskripte im SDK an und meinen Artikel unter http://www.installsi...stBox/index.htm

Spitfyr

Spitfyr
  • Full Members
  • 162 posts

Posted 31 March 2006 - 13:39

Hallo, danke für den Hinweis.
Mit einem VB Skript hat das Einfügen des Controlls mit dem eigenen Text auch schon geklappt. Da es aber nicht klappt per VBS skript größere Text einzufügen haben wir das alles in eine MSI DLL transferiert.
Bei Ausführen des SQL Statement kommt auch keine Fehlermeldung (Syntax etc.) zurück. Nur in dem Dialog ist der neue Control nicht vorhanden. Wir vermuten, dass wir nicht das korrekte Handle auf die Datenbank bekommen.
Im VBS Beispielskript taucht ja auch eine "database" auf (database.OpenView(query)) Wo und wie ist diese Varaiable denn definiert.

Gibt es wo beispiele wie man per DLL SQL Abfragen ausführt.

Grüße
Dietmar


Spitfyr

Spitfyr
  • Full Members
  • 162 posts

Posted 31 March 2006 - 13:55

Ergänzung:
Das sind die Aufrufe, die in der DLL verwendet werden. Die DLL ist über eine "Benutzerdefiniete Aktion" eingebunden (DLL ist im Binary).

Folgende Funktionsaufrufe werden alle erfolgreich durchgeführt
Funktion TestChangeDatabase:
__declspec(dllexport) int TestChangeDatabase(MSIHANDLE hdl)
{
MSIHANDLE hDatabase=MsiGetActiveDatabase(hdl);
char *buffer; // wird zu unseren INSERT INTO … SQL Ausdruck
/*"INSERT INTO Control(Control.Dialog_,Control.Control,Control.Type,Control.X,Control.Y,Control.Width,Control.Height,Control.Attributes,Control.Text) VALUES('LicenceAgreement','Info','ScrollableText',8,55,358,127,7,'<rtftext>') TEMPORARY"

*/
//….
MSIHANDLE hView;
int k=MsiDatabaseOpenView(hDatabase, buffer,&hView);
if(k==ERROR_SUCCESS)
{
k=MsiViewExecute(hView, 0);
}
return k;
}

Grüße
Dietmar

Spitfyr

Spitfyr
  • Full Members
  • 162 posts

Posted 03 April 2006 - 10:18

Asche auf mein Haupt. sad.gif

Haben das Problem lösen können.
Ursache war ein Schreibfehler. Haben statt "LicenseAgreement" in die DLL "LicenceAgreement" geschrieben. sad.gif


Nun klappt alles und wir können zur Laufzeit mit der DLL eine vom Kunden angepasste RTF Datei anzeigen biggrin.gif

Grüße
Dietmar