Variaben automatisch mit Skript in User Archiv einlesen

Zuviel Werbung?
-> Hier kostenlos registrieren
Hatte es erst gar nicht mitbekommen, aber das schreiben klappt schon (noch per Knopfdruck). Jetzt ist das Problem nur noch, dass er dazu immer die letzte Zeile nimmt, aber halt nicht die allerletzte (leer) und damit eine neue erstellt.
Weisst du da was?

Ich schau mir mal das Bsp. an.
 
Also dein Beispiel ist genau das was ich auch im Moment suche.
Nur finde ich bei dir die Skripte nicht mit denen er die Daten ins Archiv schiebt.
Die liegen ja anscheinend nicht auf Buttons.
Ich hätte gerne so eine Funktion wie auf dem Button "Insert Job".
Ich muss dazu sagen das ich mich mit Skripten so gut wie gar nicht auskenne.
Nur wenn ich alleine schon den Code von dem Button in mein Projekt einfügen will dann meckert WinCC schon rum das es "uaUtilityEnumRecords" etc. nicht kennt.
Kannst du mir da mal ein bißchen auf die Sprünge helfen?

Wäre super.
 
uaUtilityEnumRecords ist eine Projektfunktion, die du auch aus dem
Beispielprojekt in dein Projekt kopieren musst. Du findest sie, wenn du
den C-Skript Editor öffnest
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Habe jetzt soviel rausbekommen, dass man zuerst dassmachen muss:
Damit sinnvolle Daten im neuen Datensatz stehen, müssen die Felder des lokalen Datensatzpuffers vor dem Aufruf von uaArchiveInsert mit den Funktionen uaArchiveSetFieldValue... beschrieben werden.
Die interne Spalte "ID" muss mit der Funktion uaArchiveSetFieldValueLong in den aktuellen Datensatz geschrieben werden.

Und danch: uaArchiveInsert: Fügt den lokalen Datensatzpuffer in die aktuelle Datenbank ein.

Probiere momentan damit rum, bekomme aber immer noch Fehlermeldungen.
Hier mal mein Programmausschnitt:


//////////////////////////////////////////////////////////
//Zeile einfügen
/////////////////////////////////////////////////////////
uaArchiveSetFieldValueLong(hArchive,8,0); //Return-Type: BOOL
uaArchiveSetFieldValueLong(hArchive,7,0); //Return-Type: BOOL
uaArchiveSetFieldValueLong(hArchive,6,0); //Return-Type: BOOL
uaArchiveSetFieldValueLong(hArchive,5,0); //Return-Type: BOOL
uaArchiveSetFieldValueLong(hArchive,4,0); //Return-Type: BOOL
uaArchiveSetFieldValueLong(hArchive,3,0); //Return-Type: BOOL
uaArchiveSetFieldValueLong(hArchive,2,0); //Return-Type: BOOL
uaArchiveSetFieldValueLong(hArchive,1,0); //Return-Type: BOOL

bOK=uaArchiveInsert(hArchive); //Return-Type: BOOL
if (bOK==FALSE)
{
printf("Fehler: uaArchiveInsert fehlgeschlagen. error=%d\r\n",uaGetLastError());
}
printf("uaArchiveInsert war erfolgreich.\r\n");
 
Bin jetzt bissl weiter gekommen, hier der Skriptausschinitt:


bOK=uaArchiveSetFieldValueLong(hArchive,8,666); //Return-Type: BOOL
if (bOK==TRUE)
{
printf("Erfolgreich uaArchiveSetFieldValueLong, Stelle 8,Wert 666.\r\n");
}
if (bOK==FALSE)
{
printf("FEHLER uaArchiveSetFieldValueLong, Stelle 8,Wert 666.\r\n");
}
uaArchiveSetFieldValueLong(hArchive,7,666); //Return-Type: BOOL
uaArchiveSetFieldValueLong(hArchive,6,666); //Return-Type: BOOL
uaArchiveSetFieldValueLong(hArchive,5,666); //Return-Type: BOOL
uaArchiveSetFieldValueLong(hArchive,4,666); //Return-Type: BOOL
uaArchiveSetFieldValueLong(hArchive,3,666); //Return-Type: BOOL
uaArchiveSetFieldValueLong(hArchive,2,666); //Return-Type: BOOL
bOK=uaArchiveSetFieldValueLong(hArchive,1,666); //Return-Type: BOOL
if (bOK==TRUE)
{
printf("Erfolgreich uaArchiveSetFieldValueLong, Stelle 1,Wert 666.\r\n");
}
if (bOK==FALSE)
{
printf("FEHLER uaArchiveSetFieldValueLong, Stelle 1,Wert 666.\r\n");
}

uaArchiveSetFieldValueLong(hArchive,0,66); //Return-Type: BOOL

bOK=uaArchiveInsert(hArchive); //Return-Type: BOOL
if (bOK==TRUE)
{
printf("Erfolgreicher uaArchiveInsert.\r\n");
}
if (bOK==FALSE)
{
printf("FEHLER uaArchiveInsert.\r\n");
}

Habe die Funktion auf eine Taste gelegt und wenn man klickt, dann wird eine neue Zeile mit der ID 66 angelegt. Das Problem ist, dass es nur bei der 66 bleibt und ich keine neue ID- Nummer eingetragen wird. Dies müsste man mit einer Variablen machen, die immer weiter erhöht (inkrementiert) wird.Bis jetzt habe ich aber Problememit den Datentypen, der will immer gleich nen Wert als Parameter haben.

Hilfe!
 
Soweit bin ich fertig mit meinem Skript, es wird eine neue Zeile angelegt und dann die aktuellen Variablenwerte reingeschrieben. Danach wird das ganze exportiert. Gibt noch ein, zwei kleine Macken, aber sonst gehts erst mal.

Hier zum nachmachen und verbessern:

#include "apdefap.h"

int gscAction( void )
{
UAHCONNECT hConnect;
UAHARCHIVE hArchive;
BOOL bOK;
LONG NumberOfFields ;
long* plCount;
int iRet = 0;

///////////////////////////////////////////////////////////
// connect component user archive
//////////////////////////////////////////////////////////
bOK = uaConnect(&hConnect);
if ((bOK == FALSE) || (hConnect == NULL)){
printf ("#E101: CRT3884_UAExport() - uaConnect failed! error=%d\r\n", uaGetLastError());
iRet = -101;

}

///////////////////////////////////////////////////////////
// connect to archive via name
//////////////////////////////////////////////////////////
bOK = uaQueryArchiveByName(hConnect, "LEDArchiv", &hArchive);
if ((bOK == FALSE) || (hArchive == NULL)){
uaDisconnect(hConnect);
printf ("#E201: CRT3884_UAExport() - uaQueryArchiveByName failed! error=%d\r\n", uaGetLastError());
iRet = -201;
}

///////////////////////////////////////////////////////////
// set filter
//////////////////////////////////////////////////////////
//bOK = uaArchiveSetFilter(hArchive, "ChargeName like '%charge%' and DateBegin >= '2006-01-01 00:00:00' AND DateBegin < '2007-01-01'");
//if (bOK == FALSE){
//printf ("#E301: CRT3884_UAExport() - uaArchiveSetFilter failed! error=%d\r\n", uaGetLastError());
//iRet = -301;
//}

///////////////////////////////////////////////////////////
// set sort
//////////////////////////////////////////////////////////
//bOK = uaArchiveSetSort(hArchive, "ChargeUser , ChargeName desc");
//if (bOK == FALSE){
//printf ("#E302: CRT3884_UAExport() - uaArchiveSetSort failed! error=%d\r\n", uaGetLastError());
//iRet = -302;
//}

///////////////////////////////////////////////////////////
// open archive
//////////////////////////////////////////////////////////
bOK = uaArchiveOpen(hArchive);
if (bOK == FALSE){
uaReleaseArchive(hArchive);
uaDisconnect(hConnect);
printf ("#E401: CRT3884_UAExport() - uaArchiveOpen failed! error=%d\r\n", uaGetLastError());
iRet = -401;
}


//******* Get Number of Fields **********************************************
NumberOfFields = uaArchiveGetFields( hArchive );
printf("Number of Fields = %u\n", NumberOfFields );

//*******Anzahl der Datensätze***********************************************
uaArchiveGetCount(hArchive,plCount); //Return-Type: LONG
printf("Die Anzahl der Datensätz beträgt: %D\r\n",plCount);

///////////////////////////////////////////////////////////////////////
//Zur letzten Stelle des Archivs springen
//////////////////////////////////////////////////////////////////////
bOK= uaArchiveMoveLast(hArchive);
if (bOK == FALSE)
{
printf("Fehler bei uaArchiveMoveLast! error=%d\r\n", uaGetLastError());
}
if (bOK == TRUE)
{
printf("Erfolgreich zur letzten Stelle gesprungen.\r\n");
}


///////////////////////////////////////////////////////////
//Variablen ins Archiv schreiben
///////////////////////////////////////////////////////////
bOK= uaArchiveReadTagValues(hArchive,NULL,0,0);
if (bOK == TRUE)
{
printf("Erfolgreiches schreiben ins Anwenderarchiv.\r\n");
}
if (bOK == FALSE)
{
printf("Fehler beim Lesen aus den Feldvariablen! errror=%d\r\n",uaGetLastError());
}


//////////////////////////////////////////////////////////
//Zeile einfügen
/////////////////////////////////////////////////////////


uaArchiveSetFieldValueLong(hArchive,0,0); //Return-Type: BOOL
bOK=uaArchiveSetFieldValueLong(hArchive,1,666); //Return-Type: BOOL
if (bOK==TRUE)
{
printf("Erfolgreich uaArchiveSetFieldValueLong, Stelle 1,Wert 666.\r\n");
}
if (bOK==FALSE)
{
printf("FEHLER uaArchiveSetFieldValueLong, Stelle 1,Wert 666.\r\n");
}
uaArchiveSetFieldValueLong(hArchive,2,666); //Return-Type: BOOL
uaArchiveSetFieldValueLong(hArchive,3,666); //Return-Type: BOOL
uaArchiveSetFieldValueLong(hArchive,4,666); //Return-Type: BOOL
uaArchiveSetFieldValueLong(hArchive,5,666); //Return-Type: BOOL
uaArchiveSetFieldValueLong(hArchive,6,666); //Return-Type: BOOL
uaArchiveSetFieldValueLong(hArchive,7,666); //Return-Type: BOOL
bOK=uaArchiveSetFieldValueLong(hArchive,8,666); //Return-Type: BOOL
if (bOK==TRUE)
{
printf("Erfolgreich uaArchiveSetFieldValueLong, Stelle 8,Wert 666.\r\n");
}
if (bOK==FALSE)
{
printf("FEHLER uaArchiveSetFieldValueLong, Stelle 8,Wert 666.\r\n");
}


bOK=uaArchiveInsert(hArchive); //Return-Type: BOOL
if (bOK==TRUE)
{
printf("Erfolgreicher uaArchiveInsert.\r\n");
}
if (bOK==FALSE)
{
printf("FEHLER uaArchiveInsert.\r\n");
}


///////////////////////////////////////////////////////////////////
//Aktualisiert das geöffnete Anwenderarchiv
//////////////////////////////////////////////////////////////////
bOK=uaArchiveUpdate(hArchive);
if (bOK==TRUE)
{
printf("Erfolgreiches Aktualisieren des Anwenderarchivs.\r\n");
}
if (bOK==FALSE)
{
printf("Fehler ""Update_failed"" = 106.\r\n");
}


///////////////////////////////////////////////////////////
//Archiv neu laden
///////////////////////////////////////////////////////////
bOK=uaArchiveRequery(hArchive); //Return-Type: BOOL
if(bOK==FALSE)
{
printf("Archiv neu laden ist fehlgeschlagen.\r\n");
}
if(bOK==TRUE)
{
printf("Archiv neu laden war erfolgreich.\r\n");
}



///////////////////////////////////////////////////////////
// export archive
//////////////////////////////////////////////////////////
bOK = uaArchiveExport(hArchive, "c:\\Export\\MyArchive.csv", 0, 0);
if (bOK == FALSE){
printf ("#E501: CRT3884_UAExport() - uaArchiveExport failed! error=%d\r\n");
}
///////////////////////////////////////////////////////////
// close archive
//////////////////////////////////////////////////////////
bOK = uaArchiveClose(hArchive);
if (bOK == FALSE){
printf ("#E801: CRT3884_UAExport() - uaArchiveClose failed! error=%d\r\n", uaGetLastError());
iRet = -801;
}

bOK = uaReleaseArchive(hArchive);
if (bOK == FALSE){
printf ("#E802: CRT3884_UAExport() - uaReleaseArchive failed! error=%d\r\n", uaGetLastError());
iRet = -802;
}

///////////////////////////////////////////////////////////
// disconnect component user archive
//////////////////////////////////////////////////////////
bOK = uaDisconnect(hConnect);
if (bOK == FALSE){
printf ("#E803: CRT3884_UAExport() - uaDisconnect failed! error=%d\r\n", uaGetLastError());
iRet = -803;
}

return 0;
}
 
Zurück
Oben