查询功能是实现在Excel中实现日报表数据显示,本人参考资料写出自己所理解的代码,编译时存在问题
#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
/*********连接数据库操作,和查询SQL语句 ********/
__object *conn, *rst;
char csql[200];
conn = __object_create("ADODB.Connection");
rst = __object_create("ADODB.RecordSet");
if(NULL==conn)
MessageBox(NULL,"创建连接失败","失败",MB_OK);
conn->Open("DSN=CC_fortest_10_05_07_08_02_45R");
//conn->Open("Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=CC_fortest_10_05_07_08_02_45R;Data Source=.\WINCC");
if (conn->State==0)
MessageBox(NULL,"连接数据库失败","失败!",MB_OK);
else
{
char riqijiu;
/*?应该是这里有错,应该什么写?*/
sprintf(csql,"select * from UA#DailyReport where riqijiu='2010-5-10' " );//测试用,||实现功能是取控件中的值
//格式化查询字符串
MessageBox(NULL,"查寻语句有误","失败!",MB_OK);//测试断点
rst->Open(csql, conn);
/******** 查询数据不为空时,将查询结果显示在D盘的excelreport文件夹以当前时间为文件名的xls文件中 */
if (!rst->eof)
{
#pragma code ("kernel32.dll")
void GetLocalTime(LPSYSTEMTIME lpSystemTime);
#pragma code ()
int row;
char FileName[20]="";
SYSTEMTIME sysTime; //定义
__object* pExcel = NULL;
GetLocalTime(&sysTime);
sprintf(FileName,"D:\\excelreport\\%d-%d-%d.xls",sysTime.wYear,sysTime.wMonth,sysTime.wDay);
//建立以当前日期为名的Excel文件")
pExcel = __object_create("Excel.Application"); //建立应用
pExcel->Visible = 1; //可见
for (row=5;row<=28;row++)
{
pExcel->Workbooks ->Open (FileName);//Cells(row,col)
pExcel->Worksheets("sheet1")->Cells(row,3)->Value=GetTagChar("日期");
pExcel->Worksheets("sheet1")->Cells(row,4)->Value=GetTagFloat("时间");
pExcel->Worksheets("sheet1")->Cells(row,5)->Value=GetTagFloat("汽压");
pExcel->Worksheets("sheet1")->Cells(row,6)->Value=GetTagFloat("氨水流量");
}
pExcel->ActiveWorkbook->Save;
//pExcel->Workbooks->Close();
//pExcel->Quit();
__object_delete(pExcel);
//return 0;
}
/***************************结------束**************************/
else
{
MessageBox(NULL,"您查询的日期没有数据","请重新输入",MB_OK|MB_ICONQUESTION);
}
}
rst->Close;
conn->Close;
}
附:表属性是
日期(riqijiu)[char]
时间(shijianjiu)[int]
汽压(qiya)(float)
.....
问题补充:
后续调试应该还存在很多问题,各位帮帮忙,纠结了很久了,鄙人水平太次了, 是不是在 /*?应该是这里有错,应该什么写?*/
画面的变量得实例化或什么处理。
最佳答案
1、C事件脚本变量声明必须放到最前面。
2、C中必须用\\来表示\字符。
3、字符串声明可以用指针或定长声明:char *riqijiu; 或者char riqijiu[50];
4、有些COM组件的返回值是变体型,需要强制转换。
5、在画面放入应用程序窗口,选择Global Script>>GSC Diagnose,出错的话会有提示。
5、建议你改用VBS脚本。
提问者对于答案的评价:
谢谢你的建议,不过我是学C的,对VB不感冒,
我自己想了想这样贴出来找出问题所在是不现实的,何况我的这段代码肯定存在很多问题!
自己逐句编译吧
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc269222.html