Wincc Simens User Archive Datensätze anlegen/überschreiben

tooob

Level-1
Beiträge
1
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
HI Leute,

ich versuche gerade mit wincc ein programm zu schreiben, welches Falls ein ein bestimmter Name im user Archiv existiert fragt, ob er überschrieben werden soll, bzw. einen neuen anlegt, falls dieser noch nicht existiert.
Bis jetzt habe ich es nur geschafft, dass er nur erkennt ob einer existiert, wenn man die id angeklickt hat, möchte aber dass es alle datensätze automatisch durschaut ob der name existiert.

hier der Code den ich bis jetzt habe:

Code:
#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
// WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
// next TagID : 1
// WINCC:TAGNAME_SECTION_END

// WINCC:PICNAME_SECTION_START
// syntax: #define PicNameInAction "PictureName"
// next PicID : 1
// WINCC:PICNAME_SECTION_END




//ToolbarButtonClick
//Löst die mit der Taste der Symbolleiste verbundene Funktion aus. Die "ID" kann der Programmierer nutzen, um die entsprechende Tastenfunktion aufzurufen.
//ID    Tastenfunktion    ID    Tastenfunktion
//1    "Hilfe"                12    "Variablen lesen"
//2    "Konfigurationsdialog"        13    "Variablen schreiben"
//3    "Datenanbindung wählen"    14    "Archiv importieren"
//4    "Erste Zeile"            15    "Archiv exportieren"
//5    "Vorhergehende Zeile"        16    "Sortier-Dialog"
//6    "Nächste Zeile"            17    "Selektions-Dialog"
//7    "Letzte Zeile"            18    "Drucken"
//8    "Zeilen löschen"        20    "Daten exportieren"//
//9    "Zeilen ausschneiden"        19    "Zeitbasis-Dialog"
//10    "Zeilen kopieren"        1001    "Benutzerdefiniert 1"
//11    "Zeilen einfügen"        
//Das Attribut ist mit dem Namen ToolbarButtonClick dynamisierbar.



#pragma code("kernel32.dll");
void GetLocalTime(SYSTEMTIME* lpst);
#pragma code();

SYSTEMTIME  date;
UAHCONNECT hConnect;

long int a = GetPropWord(lpszPictureName,"RecipeCtrl1","SelectedID");    //Return-Type: long int 
char* DBName = GetPropChar(lpszPictureName,"RecipeCtrl1","ArchiveName");    //Return-Type: char* 

//GetLocalTime (&date);
int i,count,error;                        //i=anzahl Daten, count=For schleife, error=Name existiert bereits
char MsgTxt[80] = "";
char MsgHead[80] = "Rezeptmanagement";
int RetMsg;
char name[50];
sprintf ( MsgTxt, "Neuen Datensatz wirklich anlegen ?");
RetMsg  = MessageBox(NULL,MsgTxt,MsgHead,MB_YESNO|MB_ICONEXCLAMATION|MB_SETFOREGROUND|MB_SYSTEMMODAL);

if ( RetMsg == IDYES)
{
    

char filter[80] = "";

if (a != 0xFFFFFFFF) //keine Selektion
{
if ( uaConnect( &hConnect ) ){    //Verbindung zu User Archive wird zugelassen
    UAHARCHIVE hArchive;
    if ( uaQueryArchiveByName( hConnect, DBName, &hArchive ) )  //liefert HANDLE für runtimefunktionen
        {
              if ( uaArchiveOpen( hArchive ) )     //öffnet Archiv
              {
                                                sprintf(filter, "%s%i","ID=",a);
                                                uaArchiveSetFilter( hArchive, filter);
                                                uaArchiveRequery( hArchive);

            if ( uaArchiveMoveFirst( hArchive ) )    //erster Datensatz wird gelesen
            {
//*****************************************************************
                error=0;        
                uaArchiveMoveLast( hArchive);                    //Letzter Datensatz wird ausgelesen
                i=uaArchiveGetID( hArchive);                    //Letzte ID wird bestimmt
                for (count=0; count<i;count++){                    //Datensätze werden abgesucht, ob Name vorhanden ist
                    if(uaArchiveMovePrevious( hArchive)){            //Vorheriger Datensatz wird gelesen
                        if(name[1]==GetTagWord("rez_name")){            //Sind Namen gleich
                                 printf("Name bereits vorhanden");    
                            error=1;
                            
                        }
                    if(error==1)    break;
                    }
                if(error==1)    break;

                }
                if(error==0){
                }
                else{
    

//******************************************************************
                    printf ("Datensatz vorhanden --- Data record existing \r\n");
                                          //  if( uaArchiveReadTagValues ( hArchive, NULL, 0, 0 ))
                                                     if( uaArchiveWriteTagValues (hArchive,NULL,0,0))
                                                 { 
                                                          printf("Datensatz überschrieben");
                                                        }
                                                         else
                                                        {
                                                        printf("Datensatz überschreiben fehlgeschlagen");
                                                        MessageBox(NULL,"Fehler:\r\n Datensatz konnte nicht überschrieben werden !\r\n (Datensatz schreiben fehlgeschlagen !)",MsgHead,MB_OK|MB_ICONEXCLAMATION|MB_SETFOREGROUND|MB_SYSTEMMODAL);
                                                        }
                }
            }
            else
            {
                                                                 printf("Datensatz nicht vorhanden");
                                                                 MessageBox(NULL,"Fehler:\r\n Datensatz konnte nicht überschrieben werden !\r\n (Datensatz nicht vorhanden !)",MsgHead,MB_OK|MB_ICONEXCLAMATION|MB_SETFOREGROUND|MB_SYSTEMMODAL);

            }
            uaArchiveClose( hArchive );   //schließt Archiv
        }
        else
        {
                                             printf("Open failed.\r\n");
                                             MessageBox(NULL,"Fehler:\r\n Datensatz konnte nicht überschrieben werden !\r\n (Datenbank öffnen fehlgeschlagen !)",MsgHead,MB_OK|MB_ICONEXCLAMATION|MB_SETFOREGROUND|MB_SYSTEMMODAL);
        }
        uaReleaseArchive( hArchive );
    }
    else
    {
    }
    uaDisconnect( hConnect );
}
else
{
    printf( "Connect failed.\r\n" );
}

}
    if (SetPropWord(lpszPictureName,"RecipeCtrl1","ToolbarButtonClick",7))        //Return-Type: BOOL ( 7 ="Letzte Zeile" )
    {
        if (SetPropWord(lpszPictureName,"RecipeCtrl1","ToolbarButtonClick",12))    //Return-Type: BOOL ( 12 = "Variablen lesen")
        {
        }
    }
}
}




danke schonmal im vorraus.
 
Zurück
Oben