PMS32 Online- Hilfereferenz
Excel - Funktionen für EXCEL IN/OUT
Funktionen für EXCEL IN/OUT
*/ Kurzbeispiel für den Zugriff auf diese Struktur */ Der Zugriff erfolgt über: My.Functions.Excel */ Wird dieses Objekt in einem REPLACE oder einer Schleife SCAN ... ENDSCAN | FOR ... NEXT benötigt */ so sollte vor der Schleife die Objektstruktur in eine Variable geholt werden! */ Die Ausführungsgeschwindigkeit wird dadurch sehr vergrößert! */ Beispiel: */ Definieren einer LOKALEN Variablen LOCAL loExcel AS My.Functions.Excel */ Setzen der Variablen loExcel = My.Functions.Excel */ Jetzt erst die Schleifen durchlaufen... man beachte ALL, dass können ne Menge Sätze sein... REPLACE ALL Feldname1 WITH loExcel.Function1(),Feldname2 WITH loExcel.Function1(), ... */ Oder in einer Schleife... SCAN lvValue = loExcel.Function(Alias.Spalte) + 25 lvValue = loExcel.Function2(m.lvValue) REPLACE Feldname WITH m.lvValue,... ENDSCAN */ Es sind auch geschachtelte Aufrufe möglich...
Rückgabe:[Boolean], Führt die genannte Aktion aus. Wird von My.Clients.Action.ActionTable() aufgrufen
Boolean = My.Functions.Excel.ActionImExport(tiAction AS INTEGER,tiSubAction AS INTEGER) Boolean = My.Functions.Excel.ActionImExport(tiAction,tiSubAction)
Ausführen eines VFP-Befehls mit EVALUATE().
Achtung! Eventuell müssen Variablen als PRIVATE deklariert werden!ENDTEXT
*
TEXT TO lcMessage NOSHOW TEXTMERGE
Ausführen eines VFP-Befehls mit EVALUATE().
Variant = My.Functions.Excel.Evaluate(pcExpression AS STRING,pvDefault AS Variant,tvP1 AS Variant,tvP2 AS Variant,tvP3 AS Variant,tvP4 AS Variant, tvP5 AS Variant,tvP6 AS Variant,tvP7 AS Variant,tvP8 AS Variant,tvP9 AS Variant) Variant = My.Functions.Excel.Evaluate(pcExpression,pvDefault,tvP1,tvP2,tvP3,tvP4,tvP5,tvP6,tvP7,tvP8,tvP9)
*/ Mit Evaluate kann eine Befehlszeile ausgeführt werden */ Eventuell benutzte Variablen sind PRIVATE zu deklarieren PRIVATE pnVar1 AS Number , pnVar2 AS Number LOCAL lnVar AS Number STORE 2 TO pnVar1,pnVar2 lnVar = My.Functions.Excel.Evaluate([m.pnVar1+m.pnVar2]) WAIT WINDOW m.lnVar && Ergibt 4... ENDTEXT
Diese Funktion exportiert einen Cursor nach EXCEL
Variant = My.Functions.Excel.ExcelExport(tcAlias AS STRING,tcDbf AS STRING,tcFile AS STRING,tlEditAfter AS Boolean) Variant = My.Functions.Excel.ExcelExport(tcAlias,tcDbf,tcFile,tlEditAfter)
*/ Beispiel: LOCAL lcFile AS String lcFile = ADDBS(GETENV("APPDATA"))+'Siemens.xls' */ Wir erstellen uns zuerst einen Cursor... SELECT ; CAST(RTRIM(b01.artnr) AS V(25)) AS Artikelnummer,; CAST(RTRIM(b01.match) AS V(25)) AS Matchcode; FROM (My.CLients.Path.cDbfDir+'b01.dbf') ; WHERE b01.artnr = "SIE.3TH" ; ORDER BY 1 ; INTO CURSOR qB01Out NOFILTER */ Dieser Cursor soll nun als EXCEL Liste ausgegeben werden... IF My.Functions.Excel.ExcelExport(ALIAS(),"",m.lcFile,.T.) =MESSAGEBOX("Die Liste: "+m.lcFile+" wurde erzeugt!",64,"Liste erzeugt!") ELSE =MESSAGEBOX("Fehler bei der Erstellung der EXCEL Liste!",16,"Liste nicht erzeugt!") ENDIF
Import der Daten von EXCEL in einen Cursor incl. Prüfung
Variant = My.Functions.Excel.ExcelImport(tcAlias AS STRING,tcDbf AS STRING,tcFile AS STRING) Variant = My.Functions.Excel.ExcelImport(tcAlias,tcDbf,tcFile)
*/ Beispiel: LOCAL lcFile AS String */ Siehe auch ExcelExport() lcFile = ADDBS(GETENV("APPDATA"))+'Siemens.xls' */ Der Import gestaltet sich etwas schwieriger... */ Wir erstellen uns zuerst einen Cursor... (ACHTUNG! die LOGISCHE Spalte __IMP muss vorhanden sein!) */ HINWEIS: V-Felder sind vom Typ VARCHAR und haben einen maximale Länge! */ Der String wird aber mit dem letzten Zeichen beendet! CREATE CURSOR qB01Imp (; Artikelnummer V(25) NULL,; Matchcode V(25) NULL,; __imp L) */ Die Einlesespalten müssen ALLE (bis auf __imp) einen NULL Wert vertragen können! */ Ist der Wert der Spalte NULL, so wurden in EXCEL keine Informationen hinterlegt! */ Wichtig ist, dass die Excelliste die 'gleichen' Spaltenüberschriften hat! IF My.Functions.Excel.ExcelImport(ALIAS(),"",m.lcFile) */ Dann haben wir hier den Cursor gefüllt... */ Jetzt können wir die Artikel-Information MATCHCODE updaten... UPDATE (My.Clients.Path.cDbfDir+'b01.dbf') SET ; match = UPPER(NVL(qB01Imp.Matchcode,b01.match)) ,; lastupd = (b01.lastupd+1)%1000,; ldatum= My.xDate,; lzeit = My.xTime,; lwer = My.cUser,; lprg = My.lProgram; FROM qB01Imp ; WHERE RTRIM(b01.artnr)==RTRIM(qB01Imp.Artikelnummer) IF _TALLY>0 =MESSAGEBOX("Es wurden: "+LTRIM(STR(_TALLY))+" Datensätze geändert!",64,"Geändert!") ELSE =MESSAGEBOX("Es wurden keine Datensätze geändert!",16,"Keine Änderung!") ENDIF ELSE =MESSAGEBOX("Fehler beim Import der EXCEL Liste!",16,"Liste nicht eingelesen!") ENDIF
Rückgabe:[Boolean], Ausgabe eines Datenrasters nach MS-EXCEL. Alte Funktion = ExcelOut() in MAINX_32.PRG
Boolean = My.Functions.Excel.ExcelOut(tnWhat AS NUMBER,toGrid AS OBJECT) Boolean = My.Functions.Excel.ExcelOut(tnWhat,toGrid)
*/ Dieses Beispiel funktioniert NUR in der PMS32 Umgebung! */ Es muss ein Zeiger auf ein Datenraster (Grid) bekannt sein! */ Beim Export werden Filtereinstellungen des Datenrasters berücksichtigt! LOCAL loGrid AS Grid */ Am Beispiel der Positionsliste der Exx Masken... loGrid = poActiveForm.Pageframe1.Page1.e1x01.grde11 */ Export aller Datensätze des Datenrasters =My.Functions.Excel.ExcelOut(1,m.loGrid) */ Export des aktiven Datensatzes des Datenrasters =My.Functions.Excel.ExcelOut(2,m.loGrid) */ Export der markierten Datensätze des Datenrasters =My.Functions.Excel.ExcelOut(3,m.loGrid)
Ausführen eines VFP-Scripts incl. der Prüfung, ob ein ALIAS besteht.
Variant = My.Functions.Excel.ExecScript(_es_pcAlias AS STRING,_es_pcScript AS STRING,_es_tlBoolean AS Boolean, _es_tvP1 AS Variant,_es_tvP2 AS Variant,_es_tvP3 AS Variant,_es_tvP4 AS Variant,_es_tvP5 AS Variant,_es_tvP6 AS Variant, _es_tvP7 AS Variant,_es_tvP8 AS Variant,_es_tvP9 AS V) Variant = My.Functions.Excel.ExecScript(_es_pcAlias,_es_pcScript,_es_tlBoolean,_es_tvP1,_es_tvP2,_es_tvP3,_es_tvP4,_es_tvP5,_es_tvP6,_es_tvP7,_es_tvP8,_es_tvP9)
*/ Mit EXECSCRIPT kann ein VFP-Script ausgeführt werden LOCAL lcScript AS String,lnVar1 AS Number,lnVar2 AS Number,lnVar AS Number TEXT TO lcScript NOSHOW TEXTMERGE LPARAMETERS tnVar1 AS Number @,tnVar2 AS Number @ tnVar1 = m.tnVar1 + 1 tnVar2 = m.tnVar2 - 2 RETURN m.tnVar1 + m.tnVar2 ENDTEXT */ Vorbelegen der Variablen (Parameter) STORE 2 TO lnVar1,lnVar2 lnVar = My.Functions.Excel.ExecScript("",m.lcScript,0,@lnVar1,@lnVar2) */ und das Ergebnis... WAIT WINDOW m.lnVar WAIT WINDOW m.lnVar1 WAIT WINDOW m.lnVar2
Ausführen eines VFP-Scripts incl. PARAMETER (Collection)
Als Parameter wird eine Collection mit Informationen übergeben!
Variant = My.Functions.Excel.ExecScriptP(tcScript AS STRING,toPara AS COLLECTION) Variant = My.Functions.Excel.ExecScriptP(tcScript,toPara)
*/ Mit EXECSCRIPTP kann ein VFP-Script ausgeführt werden LOCAL lcScript AS String,lnVar AS Number,loColl AS Collection loColl = CREATEOBJECT("Collection") loColl.Add(2,"Var1") loColl.Add(2,"Var2") TEXT TO lcScript NOSHOW TEXTMERGE LPARAMETERS toColl AS Collection RETURN toColl.Item("Var1") + toColl.Item("Var2") ENDTEXT lnVar = My.Functions.Excel.ExecScriptP(m.lcScript,m.loColl) */ und das Ergebnis... WAIT WINDOW m.lnVar
Wandelt übergebene Parameter in eine Collection um.
Umkehrfunktion zu SetParameters.
Variant = My.Functions.Excel.GetParameters(tvP1 AS Variant,tvP2 AS Variant,tvP3 AS Variant,tvP4 AS Variant,tvP5 AS Variant,tvP6 AS Variant,tvP7 AS Variant,tvP8 AS Variant,tvP9 AS Variant) Variant = My.Functions.Excel.GetParameters(tvP1,tvP2,tvP3,tvP4,tvP5,tvP6,tvP7,tvP8,tvP9)
*/ Hier können mehrere Parameter in eine Collection übertragen werden LOCAL loCollection AS Collection , lni AS Integer , lcNames AS String loCollection = My.Functions.Excel.GetParameters(1,DATE(),TIME()) WAIT WINDOW m.loCollection.Count && Anzahl der Werte (3) */ Die Namen der Parameter bestimmen lcNames = "" FOR m.lni = 1 TO m.loCollection.Count lcNames = m.lcNames + ";" + m.loCollection.GetKey(m.lni) NEXT m.lni WAIT WINDOW SUBSTR(m.lcNames,2)
Wandelt übergebene Parameter in eine Collection um.
Jedoch wird als 'erster' Parameter die Anzahl der Parameter mitgegeben.
Variant = My.Functions.Excel.GetParametersCount(tnCnt AS Number,tvP1 AS Variant,tvP2 AS Variant,tvP3 AS Variant,tvP4 AS Variant,tvP5 AS Variant,tvP6 AS Variant,tvP7 AS Variant,tvP8 AS Variant,tvP9 AS Variant) Variant = My.Functions.Excel.GetParametersCount(tnCnt,tvP1,tvP2,tvP3,tvP4,tvP5,tvP6,tvP7,tvP8,tvP9)
*/ Hier können mehrere Parameter in eine Collection übertragen werden */ Als Beispiel kann nur der Aufruf eines Scripts / einer Methode dienen LPARAMETERS tp1 AS Variant , tp2 AS Variant , tp3 AS Variant && Es könnten mehr sein! LOCAL loCollection AS Collection , lni AS Integer lni = PCOUNT() && Wieviele Parameter wurden übergeben? loCollection = My.Functions.Excel.GetParametersCount(m.lni,m.tp1,m.tp2,m.tp3) WAIT WINDOW m.loCollection.Count && Anzahl der Werte (?)
Boolean = My.Functions.Excel.RestoreExternProps()
Boolean = My.Functions.Excel.SaveExternProps()
Wandelt eine übergebene Collection in Parameter um.
Umkehrfunktion zu GetParameters.
Variant = My.Functions.Excel.SetParameters(toPara AS Collection,tvP1 AS Variant @,tvP2 AS Variant @,tvP3 AS Variant @,tvP4 AS Variant @,tvP5 AS Variant @,tvP6 AS Variant @,tvP7 AS Variant @,tvP8 AS Variant @,tvP9 AS Variant @) Variant = My.Functions.Excel.SetParameters(toPara,@tvP1,@tvP2,@tvP3,@tvP4,@tvP5,@tvP6,@tvP7,@tvP8,@tvP9)
*/ Umwandeln einer Collection in Parameter LOCAL loCollection AS Collection,lnVar1 AS Number,lnVar2 AS Number loCollection = CREATEOBJECT("Collection") =loCollection.Add(1,"tvp1") =loCollection.Add(2,"tvp2") =My.Functions.Excel.SetParameters(m.loCollection,@lnVar1,@lnVar2) WAIT WINDOW m.lnVar1 WAIT WINDOW m.lnVar2
Rückgabe:[Variant], Fitten der Zeilen und Spalten des Workbooks von Excel.
Variant = My.Functions.Excel.XLS_AutoFilterFit(tvExcel as Variant, tcSheetName as string, tcColumnsFormat as string, tnHeader as Integer, tnMemoWidth as integer) Variant = My.Functions.Excel.XLS_AutoFilterFit(tvExcel,tcSheetName,tcColumnsFormat,tnHeader,tnMemoWidth)
Rückgabe:[Boolean], Prüft die angegebenen Parameter und korrigiert ggfs.
Boolean = My.Functions.Excel.XLS_CheckObjects(tp1,tp2) Boolean = My.Functions.Excel.XLS_CheckObjects(tp1,tp2)
Rückgabe:[Variant], Excel-Application schließen. Speichern?
Variant = My.Functions.Excel.XLS_CloseExcel(oExcel AS EXCEL.APPLICATION, tlNoSave AS Boolean, tlShow AS Boolean) Variant = My.Functions.Excel.XLS_CloseExcel(oExcel,tlNoSave,tlShow)
Rückgabe:[Variant], löscht alle leeren Scheets
Variant = My.Functions.Excel.XLS_DeleteEmptySheets(oExcel AS Excel.APPLICATION) Variant = My.Functions.Excel.XLS_DeleteEmptySheets(oExcel)
Variant = My.Functions.Excel.XLS_Export(tcXLSFile AS STRING, tcPath AS STRING, tlShow AS boolean, tnDeep AS INTEGER, tnMaxDeep AS INTEGER) Variant = My.Functions.Excel.XLS_Export(tcXLSFile,tcPath,tlShow,tnDeep,tnMaxDeep)
Rückgabe:[String], Gibt eine Liste von Dateien für den Export zurück.
String = My.Functions.Excel.XLS_ExportFileList(tcDir AS STRING, tcWild AS STRING, tnDeep AS INTEGER, tnMaxDeep AS INTEGER) String = My.Functions.Excel.XLS_ExportFileList(tcDir,tcWild,tnDeep,tnMaxDeep)
Rückgabe:[Boolean], Prüft eine Tabelle auf Verwendbarkeit.
Boolean = My.Functions.Excel.XLS_ExportFileListCheck(tcDbf as String) Boolean = My.Functions.Excel.XLS_ExportFileListCheck(tcDbf)
Rückgabe:[Variant], Exportiert eine Tabelle in eine Excel-Datei ohne diese dabei zu überschreiben, Sheets werden überschrieben, leere Sheets werden gelöscht, Autofit, legt mehrere Sheets an, falls die Zeilen in Exceln nicht ausreichen.
Variant = My.Functions.Excel.XLS_ExportOne(tcDbf AS STRING, oExcel AS EXCEL.APPLICATION) Variant = My.Functions.Excel.XLS_ExportOne(tcDbf,oExcel)
Variant = My.Functions.Excel.XLS_Export_All(tvExcel, tcAliases AS STRING, tcShow AS Boolean, tnDeep AS INTEGER, tnMaxDeep AS INTEGER) Variant = My.Functions.Excel.XLS_Export_All(tvExcel,tcAliases,tcShow,tnDeep,tnMaxDeep)
String = My.Functions.Excel.XLS_FieldList(tcList AS STRING, tcTr AS STRING, tcCreate as String @) String = My.Functions.Excel.XLS_FieldList(tcList,tcTr,@tcCreate)
Rückgabe:[Object], Gibt Excel -Objekt zurück und öffnet ggf. die angegebene Datei. Wird dann in this.oExcel gespeichert!
Object = My.Functions.Excel.XLS_GetExcel(tp1,tp2,tp3) Object = My.Functions.Excel.XLS_GetExcel(tp1,tp2,tp3)
Rückgabe:[String], Gibt das Numberformat für Excel zurück.
String = My.Functions.Excel.XLS_GetNumberFormat(tvValue AS Variant, toExcel AS OBJECT) String = My.Functions.Excel.XLS_GetNumberFormat(tvValue,toExcel)
Rückgabe:[Object], Gibt das gewünschte Sheet zurück und macht alles nötige.
Object = My.Functions.Excel.XLS_GetSheet(oExcel AS Excel.APPLICATION, tp2) Object = My.Functions.Excel.XLS_GetSheet(oExcel,tp2)
Rückgabe:[Object], Gibt das aktive Workbook zurück
Object = My.Functions.Excel.XLS_GetWorkbook(tp1,tp2) Object = My.Functions.Excel.XLS_GetWorkbook(tp1,tp2)
String = My.Functions.Excel.XLS_HeaderList(tvExcel AS Variant, tcSheetName AS STRING, tnHeaderRow AS INTEGER, tlWithSheetName AS boolean) String = My.Functions.Excel.XLS_HeaderList(tvExcel,tcSheetName,tnHeaderRow,tlWithSheetName)
String = My.Functions.Excel.XLS_ImportOneColumn(tvExcel AS Variant, tcSheetName AS STRING, tcColumnField AS STRING, tnHeaderRow AS INTEGER, tcAlias AS STRING) String = My.Functions.Excel.XLS_ImportOneColumn(tvExcel,tcSheetName,tcColumnField,tnHeaderRow,tcAlias)
Rückgabe:[Boolean], Exportiert einen Cursor nach Excel, Variante Einfach!
Boolean = My.Functions.Excel.XLS_QuickExport(tcAlias AS STRING, tvExcel AS Variant, tcSheetName AS STRING, tcFieldList AS STRING, tlStart AS Boolean) Boolean = My.Functions.Excel.XLS_QuickExport(tcAlias,tvExcel,tcSheetName,tcFieldList,tlStart)
Rückgabe:[String], Der schnelle Excel-Import.
String = My.Functions.Excel.XLS_QuickImport(tcFile,tcAlias,tcFieldList,tnHeaderRow,tcFilter) String = My.Functions.Excel.XLS_QuickImport(tcFile,tcAlias,tcFieldList,tnHeaderRow,tcFilter)
Rückgabe:[Variant], Gibt einen bestimmten Bereich aus Excel in einem String zurück.
Variant = My.Functions.Excel.XLS_Range2String(oExcel AS Excel.APPLICATION, tp2) Variant = My.Functions.Excel.XLS_Range2String(oExcel,tp2)
Rückgabe:[Variant], Gibt das Excel-Objekt zurück und setzt alles nötige: Parameter: Excel-Objekt oder Excel-Dateiname
Variant = My.Functions.Excel.XLS_SetExcel(tvExcel AS Variant, oExcel AS excel.APPLICATION @, oWorkbook AS excel.Workbook @) Variant = My.Functions.Excel.XLS_SetExcel(tvExcel,@oExcel,@oWorkbook)
Rückgabe:[Variant], Schreib den Header in das angegebene Sheet: Objekt oder Name, bei nicht vorhandenem Namen wird ggfs. ein neues Sheet angelegt.
lnInfo = My.Functions.Excel.XLS_WriteHeader2Sheet(oExcel AS excel.APPLICATION, lvSheet, laFlds, lnInfo) lnInfo = My.Functions.Excel.XLS_WriteHeader2Sheet(oExcel,lvSheet,laFlds,lnInfo)
Anzahl der Datensätze eines SQL Statements ermitteln.
Die Rückgabe ist Number oder .NULL.
Die Datenbankangaben:
CSYSDIR! => My.Clients.Path.cSysDir
CDBFDIR! => My.Clients.Path.cDbfDir
CFRXDIR! => My.Clients.Path.cFrxDir
CNETDIR! => My.Clients.Path.cNetDir
CTMPDIR! => My.Clients.Path.cTmpDir
werden unter VFP-Tabellen in den entsprechenden Pfad umgewandelt!
Bei der Verwendung eines SQL-Servers werden diese Informationen gegen den Datenbanknamen im SQL-Server ausgetauscht.
Variant = My.Functions.Excel._SqlCount(tcSql AS String) Variant = My.Functions.Excel._SqlCount(tcSql)
LOCAL lcSql AS String lcSql = [SELECT COUNT(*) FROM CSYSDIR!Y01 WHERE idc26="DE " AND ipy01="SU"] IF My.Functions.Excel._SqlCount(m.lcSql)>0 WAIT WINDOW "Es sind Daten vorhanden!" ENDIF */ Bemerkung: */ Bei der Angabe der Datenbank, hier CSYSDIR!, wird der Wert gegen den Pfad ausgetauscht!
Werden Datensätze im SQL-Statement ermittelt?
Die Rückgabe ist Boolean oder .NULL.
Die Datenbankangaben:
CSYSDIR! => My.Clients.Path.cSysDir
CDBFDIR! => My.Clients.Path.cDbfDir
CFRXDIR! => My.Clients.Path.cFrxDir
CNETDIR! => My.Clients.Path.cNetDir
CTMPDIR! => My.Clients.Path.cTmpDir
werden unter VFP-Tabellen in den entsprechenden Pfad umgewandelt!
Bei der Verwendung eines SQL-Servers werden diese Informationen gegen den Datenbanknamen im SQL-Server ausgetauscht.
Variant = My.Functions.Excel._SqlExist(tcSql AS String) Variant = My.Functions.Excel._SqlExist(tcSql)
LOCAL lcSql AS String lcSql = [SELECT ipy01 FROM CSYSDIR!Y01 WHERE idc26="DE " AND ipy01="SU"] IF My.Functions.Excel._SqlExist(m.lcSql) && Gibt Boolean zurück WAIT WINDOW "Es sind Daten vorhanden!" ENDIF */ Bemerkung: */ Bei der Angabe der Datenbank, hier CSYSDIR!, wird der Wert gegen den Pfad ausgetauscht!
Ausführen eines SQL-Statements und Rückgabe des angegebenen Cursors.
Die Rückgabe ist Boolean oder .NULL.
Die Datenbankangaben:
CSYSDIR! => My.Clients.Path.cSysDir
CDBFDIR! => My.Clients.Path.cDbfDir
CFRXDIR! => My.Clients.Path.cFrxDir
CNETDIR! => My.Clients.Path.cNetDir
CTMPDIR! => My.Clients.Path.cTmpDir
werden unter VFP-Tabellen in den entsprechenden Pfad umgewandelt!
Bei der Verwendung eines SQL-Servers werden diese Informationen gegen den Datenbanknamen im SQL-Server ausgetauscht.
Variant = My.Functions.Excel._SqlRead(tcSql AS String,tcAlias AS String,tvTable AS Variant,tcIndex AS String) Variant = My.Functions.Excel._SqlRead(tcSql,tcAlias,tvTable,tcIndex)
LOCAL lcSql AS String lcSql = [SELECT * FROM CSYSDIR!Y01 WHERE idc26="DE " AND ipy01="SU"] IF My.Functions.Excel._SqlRead(m.lcSql,"qY01",2) && Gibt Boolean zurück ACTIVATE _SCREEN BROWSE ENDIF */ Bemerkung: */ Bei der Angabe der Datenbank, hier CSYSDIR!, wird der Wert gegen den Pfad ausgetauscht! */ Die einzelnen Parameter: */ tcSql AS String,tcAlias AS String,tvTable AS Variant,tcIndex AS String */ Ein muss sind: tcSql AS String,tcAlias AS String */ tvTable kann angegeben werden mit: */ .F. => Cursor incl. __Changed [L] und __New [L], .T. - Tabelle incl. */ Bit-0 => 1 - Als Tabelle, 0 - Als Cursor */ Bit-1 => 1 - Ohne __Changed und __New, 0 - Mit... */ tcIndex kann angegeben werden, wenn Indizes auf dem Cursor / der Tabelle benötigt werden. */ "IndexKey1#IndexTag1;IndexKey2#IndexTag2;...." */ Wird kein IndexTag angegeben und der IndexKey NICHT aus einer Funktion ermittelt, so hat der IndexKey den Namen des IndexTag! */ Wird der IndexKey aus einer Funktion gebildet und es ist kein IndexTag angegeben, so erhält der IndexTag den Namen _Index<Nummer>
Ausführen eines SQL-Statements in ein Array und Rückgabe ob Daten ermittelt wurden.
Die Rückgabe ist Boolean oder .NULL.
Die Datenbankangaben:
CSYSDIR! => My.Clients.Path.cSysDir
CDBFDIR! => My.Clients.Path.cDbfDir
CFRXDIR! => My.Clients.Path.cFrxDir
CNETDIR! => My.Clients.Path.cNetDir
CTMPDIR! => My.Clients.Path.cTmpDir
werden unter VFP-Tabellen in den entsprechenden Pfad umgewandelt!
Bei der Verwendung eines SQL-Servers werden diese Informationen gegen den Datenbanknamen im SQL-Server ausgetauscht.
Variant = My.Functions.Excel._SqlReadArray(tcSql AS String,toObject AS Object,taArray) Variant = My.Functions.Excel._SqlReadArray(tcSql,toObject,taArray)
LOCAL lcSql AS String , laErg[1] , loObject AS Object lcSql = [SELECT * FROM CSYSDIR!Y01 WHERE idc26="DE " AND ipy01="SU"] */ Ausführen in ein lokales Array IF My.Functions.Excel._SqlReadArray(m.lcSql,.NULL.,@laErg) && Es gibt Datensätze... */ FOR i = ... NEXT i ENDIF */ Ausführen in ein Objekt-Array loObject = CREATEOBJECT("EMPTY") =ADDPROPERTY(loObject,"aErg[1]") IF My.Functions.Excel._SqlReadArray(m.lcSql,m.loObject,"aErg") && Es gibt Datensätze... */ FOR i = ... NEXT i ENDIF
Ausführen eines SQL-Statements in eine Collection und Rückgabe der Collection.
Die Rückgabe ist Collection oder .NULL.
Die Datenbankangaben:
CSYSDIR! => My.Clients.Path.cSysDir
CDBFDIR! => My.Clients.Path.cDbfDir
CFRXDIR! => My.Clients.Path.cFrxDir
CNETDIR! => My.Clients.Path.cNetDir
CTMPDIR! => My.Clients.Path.cTmpDir
werden unter VFP-Tabellen in den entsprechenden Pfad umgewandelt!
Bei der Verwendung eines SQL-Servers werden diese Informationen gegen den Datenbanknamen im SQL-Server ausgetauscht.
Variant = My.Functions.Excel._SqlReadCollection(tcSql AS String,tcIndex AS String) Variant = My.Functions.Excel._SqlReadCollection(tcSql,tcIndex)
LOCAL lcSql AS String , loColl AS Collection lcSql = [SELECT * FROM CSYSDIR!Y01 WHERE idc26="DE " AND ipy01="SU"] */ Normale Ausführung OHNE Indexangabe. */ Die Keys der Collection sind fortlaufend nummeriert! loColl= My.Functions.Excel._SqlReadCollection(m.lcSql) WAIT WINDOW loColl.GetKey(1) && "0000001" */ Hat der SQL einen eindeutigen Key so kann dieser benutzt werden! loColl= My.Functions.Excel._SqlReadCollection(m.lcSql,"ipy01") WAIT WINDOW loColl.GetKey(1) && "SU0"
Ausführen eines SQL-Statements und Rückgabe der Value des ERSTEN Feldes.
Die Rückgabe ist Variant oder .NULL.
Die Datenbankangaben:
CSYSDIR! => My.Clients.Path.cSysDir
CDBFDIR! => My.Clients.Path.cDbfDir
CFRXDIR! => My.Clients.Path.cFrxDir
CNETDIR! => My.Clients.Path.cNetDir
CTMPDIR! => My.Clients.Path.cTmpDir
werden unter VFP-Tabellen in den entsprechenden Pfad umgewandelt!
Bei der Verwendung eines SQL-Servers werden diese Informationen gegen den Datenbanknamen im SQL-Server ausgetauscht.
Variant = My.Functions.Excel._SqlReadValue(tcSql AS String,tiValue AS Integer) Variant = My.Functions.Excel._SqlReadValue(tcSql,tiValue)
LOCAL lcSql AS String , lvValue AS Variant */ Gibt den Inhalt der ERSTEN Spalte zurück lcSql = [SELECT bezei,kurz,master FROM CSYSDIR!Y01 WHERE idc26="DE " AND ipy01="SU"] lvValue = My.Functions.Excel._SqlReadValue(m.lcSql) && y01.Bezei */ Gibt den Inhalt der ZWEITEN Spalte zurück lcSql = [SELECT bezei,kurz,master FROM CSYSDIR!Y01 WHERE idc26="DE " AND ipy01="SU"] lvValue = My.Functions.Excel._SqlReadValue(m.lcSql,2) && y01.Kurz
UPDATE eines lokalen Cursors gegenüber der angegebenen Tabelle durchführen.
Die Rückgabe ist Boolean oder .NULL.
Der Cursor MUSS die Spalten __Changed und __New enthalten!
Außerdem MUSS die Zieltabelle die Spalte LastUpd enthalten!
Variant = My.Functions.Excel._SqlUpdate(tcTable AS STRING,tcAlias AS STRING,tcIdName AS STRING,tcFilter AS String) Variant = My.Functions.Excel._SqlUpdate(tcTable,tcAlias,tcIdName,tcFilter)
LOCAL lcSql AS String , tlUpdate AS Boolean lcSql = [SELECT * FROM CDBFDIR!B01 WHERE b01.artnr='SIE.3TH'] */ Lesen der Daten vom Backend IF My.Functions.Excel._SqlRead(m.lcSql,"qB01",1) */ Ändern der Daten... SELECT qB01 REPLACE ALL match WITH "LEISTUNGSSCHALTER",__Changed WITH .T. tlUpdate = My.Functions.Excel._SqlUpdate("B01",ALIAS(),"IDB01") IF NOT m.tlUpdate WAIT WINDOW My.Functions.Excel.cLastError ENDIF ENDIF
UPDATE mehrerer lokaler Cursor gegenüber den angegebenen Tabellen durchführen.
Die Rückgabe ist Boolean oder .NULL.
Die Cursor MUSS die Spalten __Changed und __New enthalten!
Außerdem MUSS die Zieltabelle die Spalte LastUpd enthalten!
;Filter1 = My.Functions.Excel._SqlUpdateAll(tcList AS STRING) ;Filter1 = My.Functions.Excel._SqlUpdateAll(tcList)
LOCAL tlUpdate AS Boolean */ Lesen der Daten vom Backend IF My.Functions.Excel._SqlRead([SELECT * FROM CDBFDIR!B01 WHERE b01.artnr='SIE.3TH'],"qB01",1) AND ; My.Functions.Excel._SqlRead([SELECT d03.* FROM CDBFDIR!D03 INNER JOIN CDBFDIR!B01 ON d03.idd03=b01.idd03 WHERE b01.artnr='SIE.3TH'],"qD03",1) */ Ändern der Daten... UPDATE qB01 SET lang = qD03.bez, __Changed = .T. FROM qD03 WHERE qB01.idd03=qD03.idd03 UPDATE qD03 SET ekpdatum = My.xDate, __Changed = .T. tlUpdate = My.Functions.Excel._SqlUpdateAll("B01;QB01;IDB01#D03;QD03;IDD03") IF NOT m.tlUpdate WAIT WINDOW My.Functions.Excel.cLastError ENDIF ENDIF */ Hinweis: */ Der Update der einzel angegebenen Cursor wird mit einer Transaktion durchgeführt! */ Läuft einer der Updates auf einen Fehler wird die Änderung rückgängig gemacht! */ Der String ist folgendermaßen aufgebaut: */ "Tableinfo1#Tableinfo2#Tableinfo3#..." */ Tableinfo: */ Tabelle;Cursor;ID-Field[;Filter]
Rückgabe:[String], Erstellt eine Feldliste zur erstellung eines Arrays.
String = My.Functions.Excel.xls_getFieldList(tcalias AS STRING, oExcel AS EXCEL.APPLICATION) String = My.Functions.Excel.xls_getFieldList(tcalias,oExcel)
Wert:[Boolean], Gibt an, ob beim Export automatisch ein AutoFilter gesetzt wird und die Spalten und zeilken gefittet werden.
Boolean = My.Functions.Excel.XLS_lSetAutoFilterFit
Mit dieser Property kann der letzte Fehler im Klartext abgerufen werden.
String = My.Functions.Excel.cLastError
*/ Vorausgesetzt wird, dass My bekannt ist... LOCAL lcError AS String lcError = My.Functions.Excel.cLastError
Methode in der der letzte Fehler auftrat.
Aufbau: [Fehlernummer] [Methode] [Zeilennummer] [Message]
String = My.Functions.Excel.cMethod
*/ Abruf... WAIT WINDOW My.Functions.Excel.cMethod
H = My.Functions.Excel.hFontBold
H = My.Functions.Excel.hFontItalic
H = My.Functions.Excel.hFontName
H = My.Functions.Excel.hFontSize
Wert:[Integer], Umkehrfunktion zu iExcelEnable. Bitpattern: 1=.T.=gedimmt
Number = My.Functions.Excel.iExcelDim
Rückgabe:[Integer], Gibt die BitPattern zurück um Excel Funktion (Import/Export) ausführen zu können. Siehe PmsAction.h
Number = My.Functions.Excel.iExcelEnable
Wert:[Integer], Zeitgesteuertes iExcelDim. Bitpattern: 1=.T.=gedimmt
Number = My.Functions.Excel.iExcelTDim
Wert:[Integer], Zeitgesteuertes iExcelEnable. Bitpattern: 1=.T.=enabled
Number = My.Functions.Excel.iExcelTEnable
Thermosanzeige bei der Ausführung
Boolean = My.Functions.Excel.lShowThermos
My.Functions.Excel.lShowThermos = .T.
Boolean = My.Functions.Excel.lTransferWithADODb
Boolean = My.Functions.Excel.lTransferWithXML
Fehlernummer des letzten Fehlers.
Ist der Wert kleiner null, so handelt es sich um einen logischen Fehler.
Number = My.Functions.Excel.nError
WAIT WINDOW My.Functions.Excel.nError
Zeilennummer, in der der letzte Fehler auftrat
Number = My.Functions.Excel.nLine
WAIT WINDOW My.Functions.Excel.nLine
Verarbeitete Datensätze
Number = My.Functions.Excel.nRecords
WAIT WINDOW My.Functions.Excel.nRecords
Ausführungszeit in Sekunden
Number = My.Functions.Excel.nSeconds
WAIT WINDOW My.Functions.Excel.nSeconds
Status der Ausführung
Number = My.Functions.Excel.nStatus
WAIT WINDOW My.Functions.Excel.nStatus
Merkt sich die Datenumgebung für eine Verarbeitung.
Beim Release der Variable wird die vorherige Datenumgebung wieder hergestellt.
Object = My.Functions.Excel.oSelected
LOCAL loSelected AS My_Fu_Selected loSelected = My.Functions.Excel.oSelected */ Danach können Tabellen und Cursor geöffnet werden... */ Mit dem Nachfolgenden Befehl wird der obige Zustand der Datenumgebung wieder hergestellt RELEASE loSelected
Instanziiert einen temporären Thermos
Object = My.Functions.Excel.oThermos
LOCAL loThermos AS My_Sy_Thermos */ Instanziieren loThermos = My.Functions.Excel.oThermos loThermos.AutoCenter = .T. loThermos.cFaktor(1,1/10,.F.,"Info-1...") loThermos.cFaktor(1,2/10,.F.,"Info-2...") */ ... */ Schliesst den Thermos RELEASE loThermos
P = My.Functions.Excel.pFontBold
P = My.Functions.Excel.pFontItalic
P = My.Functions.Excel.pFontName
P = My.Functions.Excel.pFontSize
P = My.Functions.Excel.psBottomMargin
P = My.Functions.Excel.psLeftMargin
P = My.Functions.Excel.psMulti
P = My.Functions.Excel.psOrientation
P = My.Functions.Excel.psRightMargin
P = My.Functions.Excel.psTopMargin
Siehe auch : Hauptmenü / Hauptindex / Such Index / Cursor Index / Programm Module / Tabellen Index / Tabellenmodule / Masken Index / Programmcode Index / Servicepacks / My.Struktur / Funktionen / Sonstiges Index
Lokale Benutzerhilfe : Meine eigene Hilfe / Zurück zur PMS32 - Hilfe
Dateiversion:1.0.04#3648 - H.U.DD#SSFF 02.12.2022
Senden Sie Ihren Kommentar zu diesem Thema an das Entwicklungsteam von PMS32
Weitere Informationen finden Sie unter der aktuellen
PMS32 WEB-Hilfe
Die Informationen dieser Mitteilung sind vertraulich und nur für Sie bestimmt. Unbefugtes Weiterleiten,
Veröffentlichen, Kopieren usw. sind untersagt und werden gerichtlich verfolgt.
© PMS Compelec GmbH 2022 ® el-Projekt