回复:关于WINCC连接数据库的怪异问题!求解~

花落月下

  • 帖子

    94
  • 精华

    0
  • 被关注

    4

论坛等级:游士

注册时间:2010-05-11

普通 普通 如何晋级?

发布于 2010-09-16 13:28:17

3楼

目标数据库就是WINCC 带的那个 SQL 2005
此下为连接数据库语句:
//***************************************************************************************************************************
// GLOBAL CONNECTION POINTER TO CS SYSTEM DATABASE
//***************************************************************************************************************************
__object *cnCS=NULL;
char LocalMachineName[50];
//***************************************************************************************************************************
#include "plan.h"
#include "apdefap.h"
BOOL CS_Open()
{
// WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
#define TAG_STATE "Sys_DBConnectionOpen"
#define TAG_COMPUTER "@LocalMachineName"
// next TagID : 1
// WINCC:TAGNAME_SECTION_END

#define adStateOpen 1
#define adStateClose 0

extern __object *cnCS;
TCHAR szProjectDir[_MAX_PATH + 1];
TCHAR ConnectionString[_MAX_PATH + 1];

if(GetProjectDirectory(szProjectDir))
{
if(cnCS==NULL) {// IF CONNECTION IS NOT ALREDY SET, TRY TO CREATE A NEW ONE
strcpy(LocalMachineName,GetTagCharWait(TAG_COMPUTER));
if((cnCS = __object_create("ADODB.Connection")) == NULL)
{
printf( "ComasCS_Open. Error in create connection.\r\n");
SetTagBit(TAG_STATE,adStateClose);
return FALSE;
}
}
if(cnCS->State==adStateOpen)
cnCS->Close;
if(cnCS->State==adStateClose)
{
sprintf(ConnectionString,STRSQLCONN, GetTagCharWait("@ServerName"));
//printf("%s\r\n",ConnectionString);
cnCS->Open(ConnectionString);
}
if(cnCS->State==adStateOpen)
{
SetTagBit(TAG_STATE,adStateOpen);
return TRUE;
}
else
{
printf( "CS_Open. Error in open connection.\r\n");
SetTagBit(TAG_STATE,adStateClose);
return FALSE;
}
}
printf( "CS_Open. Error in GetProjectDirectory.\r\n");
SetTagBit(TAG_STATE,adStateClose);
return FALSE;
}


此下为对数据库写数据:

#include "apdefap.h"
void WriteTrendTemplate(char* lpszPictureName,char* lpszObjectName,char* Des cription,char* Units,Tag Tag_Name,float Max_Value,float Min_Value,char* Group)
{
#define adUseClient 3
#define adOpenKeyset 1
#define adLockOptimistic 3
#define adCmdTable 2
#define adStateOpen 1

extern __object *cnCS;
__object *rsTemp=NULL;
TCHAR szQuery[_MAX_PATH + 1];
char* computer=GetTagChar("@LocalMachineName");


// CHECK IF EXIST A CONNECTION OR IF THE STATE IS DOWN
if(CS_Open ())
if((rsTemp = __object_create("ADODB.RecordSet"))!=NULL)
{
sprintf(szQuery,"SELECT * FROM TRENDS WHERE PenTagName='%s' AND PenGroup='%s' AND COMPUTER='%s'",Tag_Name,Group,computer);
rsTemp->CursorLocation = adUseClient;
rsTemp->Open(szQuery, cnCS,adOpenKeyset ,adLockOptimistic);
if(rsTemp->State ==adStateOpen)
if(rsTemp->RecordCount() > 0)
{
//RECORD FOUND NEED TO DELETE

rsTemp->MoveFirst;
rsTemp->Delete;
printf("CO_LTGRAY");
SetBackColor(lpszPictureName,lpszObjectName,CO_LTGRAY);
rsTemp->Close;
}
else
{
//RECORD NOT FOUND NEED TO CREATE
//VERIFY IF THERE ARE THE MAXIMUM NUMBER OF PENS (8)
rsTemp->Close;
sprintf(szQuery,"SELECT * FROM TRENDS_SELECTIONS WHERE PenGroup='%s' AND COMPUTER='%s'",Group,computer);
rsTemp->CursorLocation = adUseClient;
rsTemp->Open(szQuery, cnCS,adOpenKeyset ,adLockOptimistic);
if(rsTemp->State ==adStateOpen)
{
if(rsTemp->RecordCount() <8) // I NSERT HERE THE MAXIMUM NUMBER OF PENS
{
rsTemp->AddNew();
rsTemp->Fields("PenDes cription")->Value=Des cription;
rsTemp->Fields("PenTagName")->Value=Tag_Name;
rsTemp->Fields("PenUnits")->Value=Units;
rsTemp->Fields("PenMax")->Value=Max_Value;
rsTemp->Fields("PenMin")->Value=Min_Value;
rsTemp->Fields("PenObject")->Value=lpszObjectName;
rsTemp->Fields("PenPicture")->Value= lpszPictureName;
rsTemp->Fields("PenGroup")->Value=Group;
rsTemp->Fields("COMPUTER")->Value=computer;
rsTemp->Update;
printf("CO_MAGENTA");

SetBackColor(lpszPictureName,lpszObjectName,CO_MAGENTA);
}
rsTemp->Close;
}
else
printf("WriteTrendTemplate. Recordset not created.\r\n");
}
else
printf("WriteTrendTemplate. Recordset not opened.\r\n");
}
else
printf("Write TrendTemplate. Recordset not created.\r\n");
else
printf("Write TrendTemplate. Database not previously attached!\r\n");
}
HMI技术
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC WinCC / Panel

共有32667条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。