📄 sample11_1.c
字号:
#include "cvi_db.h" #include <ansi_c.h> #include <utility.h>#include <cvirte.h> #include <userint.h>#include "sample11_1.h"int panelHandle,panel2;int hdbc=0,hstmt;char SelectTable[256],content[3][256];float dou1,dou2;void InitDataSource(void); void ExitDataSource(void); void ShowError(){MessagePopup("Database Error",DBErrorMessage());}void GetCollumInfo(void); void ShowTable(char SelectTable[256]); void FromBufToPara(char buf[]);int main (int argc, char *argv[]){ if (InitCVIRTE (0, argv, 0) == 0) return -1; /* out of memory */ if ((panelHandle = LoadPanel (0, "sample11_1.uir", PANEL)) < 0) return -1; InitDataSource(); DisplayPanel (panelHandle); RunUserInterface (); ExitDataSource(); return 0;} int CVICALLBACK ListTable (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){ char buf[256]; switch (event) { case EVENT_COMMIT: GetCtrlVal (panelHandle, PANEL_LISTTABLE, SelectTable); panel2=LoadPanel (0, "sample11_1.uir", PANEL_2); if(strcmp(SelectTable,"testres")!=0) return 0; ShowTable(SelectTable); if(DBNumberOfRecords (hstmt)<=0){ SetCtrlAttribute (panel2, PANEL_2_DELETE, ATTR_DIMMED, 1); SetCtrlAttribute (panel2, PANEL_2_MODIFY, ATTR_DIMMED, 1); } InstallPopup( panel2); break; case EVENT_VAL_CHANGED: GetCollumInfo(); break; } return 0;} int CVICALLBACK ok (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){ if(event== EVENT_COMMIT) QuitUserInterface (0); return 0;}int CVICALLBACK Quit (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){ if(event== EVENT_COMMIT){ DBDeactivateSQL(hstmt); RemovePopup(panel2); DiscardPanel(panel2); } return 0;}int CVICALLBACK Delete (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){ int index; if(event== EVENT_COMMIT && DBNumberOfRecords (hstmt)>0) { GetCtrlIndex (panel2, PANEL_2_LISTTABLECONTENT, &index); DeleteListItem (panel2, PANEL_2_LISTTABLECONTENT, index, 1); DBAllowFetchAnyDirection (hdbc, 1); DBFetchRandom(hstmt,index+1); DBDeleteRecord (hstmt); if(DBNumberOfRecords (hstmt)<=0){ SetCtrlAttribute (panel2, PANEL_2_DELETE, ATTR_DIMMED, 1); SetCtrlAttribute (panel2, PANEL_2_MODIFY, ATTR_DIMMED, 1); } } return 0;}int CVICALLBACK Add (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){ int panel4,index,paneltemp4,contr,retval; char temp[256]; if(event== EVENT_COMMIT) { GetCtrlIndex (panel2, PANEL_2_LISTTABLECONTENT, &index); panel4=LoadPanel (0, "sample11_1.uir", PANEL_4); if(control==PANEL_2_MODIFY){ GetLabelFromIndex (panel2, PANEL_2_LISTTABLECONTENT, index, temp); SetCtrlVal (panel4, PANEL_4_NEWRECORD, temp); } InstallPopup(panel4); while(1){ if(GetUserEvent (1, &paneltemp4, &contr)==1) if(contr==PANEL_4_OK&&paneltemp4==panel4){ GetCtrlVal (panel4, PANEL_4_NEWRECORD, temp); if(strcmp(temp,"")==0){ MessagePopup("Error","Input error ,no changed"); continue; } if(control==PANEL_2_MODIFY) { DBAllowFetchAnyDirection (hdbc, 1); if(index>-1) DBFetchRandom(hstmt,index+1); } else DBCreateRecord (hstmt); retval=0;//do not move this , //used to resulve the bug of DBFetchRandom func FromBufToPara(temp); retval=DBPutRecord (hstmt); if(retval!= DB_SUCCESS) { MessagePopup("Error","Input error,no changed"); continue; } break; } } RemovePopup (0); DiscardPanel( panel4); if(control==PANEL_2_MODIFY) ReplaceListItem (panel2, PANEL_2_LISTTABLECONTENT, index, temp, temp); else InsertListItem (panel2, PANEL_2_LISTTABLECONTENT, -1, temp, temp); SetCtrlAttribute (panel2, PANEL_2_DELETE, ATTR_DIMMED, 0); SetCtrlAttribute (panel2, PANEL_2_MODIFY, ATTR_DIMMED, 0); } return 0;}int CVICALLBACK Modify (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){ if(event== EVENT_COMMIT) Add(0,PANEL_2_MODIFY,EVENT_COMMIT,NULL,0,0); return 0;}void ShowTable(char SelectTable[256]){ int collumsta; char buf[256]; sprintf(buf,"SELECT * FROM %s",SelectTable); hstmt = DBActivateSQL(hdbc, buf); DBBindColChar (hstmt, 1, 11, content[0],&collumsta, ""); DBBindColFloat (hstmt, 2,&dou1 ,&collumsta ); DBBindColFloat (hstmt, 3,&dou2 ,&collumsta ); ClearListCtrl (panel2,PANEL_2_LISTTABLECONTENT ); while (DBFetchNext (hstmt) == DB_SUCCESS){ sprintf(buf," %s %9.3f %9.3f",content[0],dou1,dou2); InsertListItem (panel2, PANEL_2_LISTTABLECONTENT, -1, buf, buf); } }void GetCollumInfo(){ int collumNum,recordNum,hstmt; char buf[256],tbName[256]; GetCtrlVal (panelHandle, PANEL_LISTTABLE, tbName); sprintf(buf,"SELECT * FROM %s",tbName); hstmt = DBActivateSQL(hdbc, buf); collumNum=DBNumberOfColumns(hstmt); recordNum=DBNumberOfRecords (hstmt); SetCtrlVal (panelHandle, PANEL_TABLERECORDNUM,recordNum ); SetCtrlVal (panelHandle, PANEL_TABLFIELDNUM,collumNum ); SetCtrlVal (panelHandle, PANEL_TABLENAME,tbName ); DBDeactivateSQL(hstmt); } void GetTableInfo(){ int resCode,hstmt; long tableStat; char tbName[256]; hstmt = DBTables(hdbc,"","","", DB_TBL_TABLE ); DBBindColChar(hstmt, 3, 128, tbName,&tableStat, ""); while ((resCode = DBFetchNext (hstmt)) == DB_SUCCESS){ InsertListItem (panelHandle, PANEL_LISTTABLE, -1, tbName, tbName); } resCode = DBDeactivateSQL(hstmt); } void GetDatabaseInfo(){ int resCode,hstmt; long remarksStat; char dbName[256]; hstmt = DBDatabases(hdbc); DBBindColChar(hstmt, 1, 256, dbName,&remarksStat, ""); while ((resCode = DBFetchNext (hstmt)) == DB_SUCCESS) SetCtrlVal (panelHandle, PANEL_DATASOURCENAME,dbName ); DBDeactivateSQL(hstmt); }void InitDataSource(){ int resCode,hstmt,panel3,paneltemp3,control; long remarksStat; char srcName[256],remarks[256]; panel3=LoadPanel (0, "sample11_1.uir", PANEL_3); hstmt = DBSources(DB_SRC_AVAILABLE); DBBindColChar(hstmt, 1, 256, srcName, &remarksStat, ""); while ((resCode = DBFetchNext (hstmt)) == DB_SUCCESS) InsertListItem (panel3, PANEL_3_LISTSOURCE, -1, srcName, srcName); resCode = DBDeactivateSQL(hstmt); InstallPopup(panel3); while(1){ if(GetUserEvent (1, &paneltemp3, &control)==1) if(control==PANEL_3_LISTSOURCE&&paneltemp3==panel3) { GetCtrlVal (panel3, PANEL_3_LISTSOURCE, srcName); break; } } sprintf(remarks,"DSN=%s",srcName); hdbc = DBConnect (remarks); if (hdbc <= 0) ShowError(); GetDatabaseInfo(); GetTableInfo(); GetCollumInfo(); RemovePopup (0); DiscardPanel( panel3); }void ExitDataSource(){ int resCode; resCode = DBDisconnect (hdbc); if (resCode != DB_SUCCESS) ShowError();} void FromBufToPara(char buf[256]){ int i; char *cha1,*cha2,*cha3,buf1[256]; strcpy(buf1,buf); i=0; while(buf1[i]==' ') i++; cha3=&buf1[i]; cha1=strchr (cha3, ' '); if(cha1==NULL){ strcpy(content[0],cha3); dou1=0; dou2=0; return ; } cha1[0]='\0'; strcpy(content[0],cha3); i=1; while(cha1[i]==' ') i++; cha2=strchr (&cha1[i], ' '); if(cha2==NULL){ dou1=atof(&cha1[1]); dou2=0; return ; } cha2[0]='\0'; dou1=atof(&cha1[1]); dou2=atof(&cha2[1]);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -