?? vc_oracle2.txt
字號:
int p;
memset( temp_value, '\0', sizeof(temp_value));
for(int i=0;i<fknum;i++)
{
tempTableN = fkSign[i][0];
if(strcmp(tempTableN,"")==0)
{
break;
}
strcpy(temp_value[tempNum][0],tempTableN);
sqlUpdateSelect = "select ";
for(int j=1,q=1;j<20;j++)
{
tempField = fkSign[i][j];
if(strcmp(tempField,"")==0)
{
break;
}
if(flag==1)
{
sqlUpdateSelect.append(",");
}
else
{
flag=1;
}
sqlUpdateSelect.append(tempField);
}
flag = 0;
sqlUpdateSelect.append(" from ");
sqlUpdateSelect.append(tableName);
sqlUpdateSelect.append(" where ");
sqlUpdateSelect.append(keyName);
sqlUpdateSelect.append(" = \'");
sqlUpdateSelect.append(keyValue);
sqlUpdateSelect.append("\'");
chSqlUpdateSelect = sqlUpdateSelect.c_str();
if (cn)
{
st = OCI_StatementCreate(cn);
OCI_ExecuteStmt(st,MT(chSqlUpdateSelect));
OCI_Commit(cn);
rs = OCI_GetResultset(st);
while (OCI_FetchNext(rs)) //循環存儲表中主鍵紀錄的值
{
const char *value;
p = 1;
while(p<=fknum)
{
value = OCI_GetString(rs,p);
strcpy(temp_value[tempNum][p],value);
p++;
}
tempNum++;
}
//n = OCI_GetRowCount(rs);
}
}
char *fkTableName,*fkFieldName;
flag = 0;
memset( temp_key, '\0', sizeof(temp_key));
for(int i=0;i<fknum;i++)
{
sqlUpdateSelect = "select key from ";
tempTableN = temp_value[i][0];
fkTableName = fkSign[i][0];
if(strcmp(tempTableN,"")==0)
{
break;
}
strcpy(temp_key[i][0],tempTableN);
sqlUpdateSelect.append(tempTableN);
sqlUpdateSelect.append(" where ");
for(int j=1;j<20;j++)
{
tempField = temp_value[i][j];
fkFieldName = fkSign[i][j];
if(strcmp(tempField,"")==0)
{
break;
}
if(flag==1)
{
sqlUpdateSelect.append(" and ");
}
else
{
flag=1;
}
sqlUpdateSelect.append(fkFieldName);
sqlUpdateSelect.append(" = \'");
sqlUpdateSelect.append(tempField);
sqlUpdateSelect.append("\'");
}
flag = 0;
chSqlUpdateSelect = sqlUpdateSelect.c_str();
p = 1;
if (cn)
{
st = OCI_StatementCreate(cn);
OCI_ExecuteStmt(st,MT(chSqlUpdateSelect));
OCI_Commit(cn);
rs = OCI_GetResultset(st);
while (OCI_FetchNext(rs)) //循環存儲表中主鍵紀錄的值
{
const char *value;
value = OCI_GetString(rs,1);
strcpy(temp_key[i][p],value);
p++;
}
//n = OCI_GetRowCount(rs);
}
}
char *tName;
for(int k=0;k<20;k++)
{
for(int i=0;i<fknum;i++)
{
tempTableN = fkSign[i][0];
tName = temp_key[k][0];
if(strcmp(tName,tempTableN)==0)
{
for(int j=1;j<20;j++)
{
tempField = temp_key[k][j];
if(strcmp(tempField,"")==0)
{
break;
}
strcpy(updatefeild[updnum][0][0],"tablename");
strcpy(updatefeild[updnum][1][0],tempTableN);
strcpy(updatefeild[updnum][0][1],"key");
strcpy(updatefeild[updnum][1][1],tempField);
q=2;
for(int h=1;h<20;h++)
{
fkFieldName = fkSign[i][h];
if(strcmp(fkFieldName,"")==0)
{
break;
}
for(int i=0;i<pknum;i++)
{
pkname = pkSign[i];
tempField = pkColumnValue[i];
if(strcmp(fkFieldName,pkname)==0)
{
strcpy(updatefeild[updnum][0][q],pkname); //updnum表示有多少條記錄要改,此處為一
strcpy(updatefeild[updnum][1][q],tempField);
q++;
}
}
}
updnum++;
}
}
}
}
return true;
}
}
}
}
}
}
}
else //引用了其它表的字段,如果修改內容包括引用字段,返回修改失敗,fkToPk數組
{
int q = 0,updnum = 0;
memset( fkField, '\0', sizeof(fkField));
for(int i=0;i<fkToPknum;i++)
{
tempTableN = fkToPk[i][0];
if(strcmp(tempTableN,"")==0)
{
break;
}
strcpy(fkField[i][0],tempTableN);
for(int j=1;j<20;j++)
{
tempField = fkToPk[i][j];
if(strcmp(tempField,"")==0)
{
break;
}
value = select_value(tableName,tempField,keyName,keyValue);
strcpy(fkField[i][j],value);
}
}
if(strcmp(keyName,"key")==0)
{
for(int i=0;i<10;i++) //判斷是否有父表內容進行修改,有則修改失敗
{
tempTableN = fkField[i][0];
if(strcmp(tempTableN,"")==0)
{
break;
}
for(int j=1;j<20;j++)
{
tempField = fkToPk[i][j];
tempFieldValue = fkField[i][j];
if(strcmp(tempField,"")==0)
{
break;
}
for(int i=2;i<fieldUpdateCount;i++)
{
fieldName = fieldUpdate_array[i].getFieldName();
fieldValue = fieldUpdate_array[i].getFieldValue();
if(strcmp(tempField,fieldName)==0) //加一個比較,比較其中的值是否相同,不同則失敗
{
if(strcmp(fieldValue,tempFieldValue)!=0)
{
printf("修改失敗,所要修改的內容引用自父表!");
return false;
}
}
}
}
}
memset( pkColumnValue, '\0', sizeof(pkColumnValue));
for(int i=0;i<pknum;i++)
{
pkname = pkSign[i];
pkvalue = select_value(tableName,pkname,keyName,keyValue);
strcpy(pkColumnValue[i],pkvalue);
}
for(int i=0;i<pknum;i++)
{
pkname = pkSign[i];
pkvalue = pkColumnValue[i];
for(int j=1;j<fieldUpdateCount;j++)
{
fieldName = fieldUpdate_array[j].getFieldName();
fieldValue = fieldUpdate_array[j].getFieldValue();
if(strcmp(fieldName,pkname)==0)
{
if(strcmp(fieldValue,pkvalue)!=0)
{
strcpy(pkColumnValue[i],fieldValue);
}
}
}
}
if(fknum==0)
{
memset( updatefeild, '\0', sizeof(updatefeild));
for(int i=0;i<fieldUpdateCount;i++)
{
fieldName = fieldUpdate_array[i].getFieldName();
fieldValue = fieldUpdate_array[i].getFieldValue();
strcpy(updatefeild[updnum][0][q],fieldName); //updnum表示有多少條記錄要改
strcpy(updatefeild[updnum][1][q],fieldValue);
q++;
}
updnum++;
return true;
}
else
{
memset( updatefeild, '\0', sizeof(updatefeild));
for(int i=0;i<fieldUpdateCount;i++)
{
fieldName = fieldUpdate_array[i].getFieldName();
fieldValue = fieldUpdate_array[i].getFieldValue();
strcpy(updatefeild[updnum][0][q],fieldName); //updnum表示有多少條記錄要改
strcpy(updatefeild[updnum][1][q],fieldValue);
q++;
}
updnum++;
flag = 0;
int p;
memset( temp_value, '\0', sizeof(temp_value));
for(int i=0;i<fknum;i++)
{
tempTableN = fkSign[i][0];
if(strcmp(tempTableN,"")==0)
{
break;
}
strcpy(temp_value[tempNum][0],tempTableN);
sqlUpdateSelect = "select ";
for(int j=1,q=1;j<20;j++)
{
tempField = fkSign[i][j];
if(strcmp(tempField,"")==0)
{
break;
}
if(flag==1)
{
sqlUpdateSelect.append(",");
}
else
{
flag=1;
}
sqlUpdateSelect.append(tempField);
}
flag = 0;
sqlUpdateSelect.append(" from ");
sqlUpdateSelect.append(tableName);
sqlUpdateSelect.append(" where ");
sqlUpdateSelect.append(keyName);
sqlUpdateSelect.append(" = \'");
sqlUpdateSelect.append(keyValue);
sqlUpdateSelect.append("\'");
chSqlUpdateSelect = sqlUpdateSelect.c_str();
if (cn)
{
st = OCI_StatementCreate(cn);
OCI_ExecuteStmt(st,MT(chSqlUpdateSelect));
OCI_Commit(cn);
rs = OCI_GetResultset(st);
while (OCI_FetchNext(rs)) //循環存儲表中主鍵紀錄的值
{
const char *value;
p = 1;
while(p<=pknum)
{
value = OCI_GetString(rs,p);
strcpy(temp_value[tempNum][p],value);
p++;
}
tempNum++;
}
//n = OCI_GetRowCount(rs);
}
}
sqlUpdateSelect = "select key from ";
sqlUpdateSelect.append(tableName);
sqlUpdateSelect.append(" where ");
for(int i=0;i<pknum;i++)
{
pkname = pkSign[i];
pkvalue = pkColumnValue[i];
if(flag==1)
{
sqlUpdateSelect.append(" and ");
}
else
{
flag=1;
}
sqlUpdateSelect.append(pkname);
sqlUpdateSelect.append(" = \'");
sqlUpdateSelect.append(pkvalue);
sqlUpdateSelect.append("\'");
}
flag = 0;
chSqlUpdateSelect = sqlUpdateSelect.c_str();
p = 1;
if (cn)
{
st = OCI_StatementCreate(cn);
OCI_ExecuteStmt(st,MT(chSqlUpdateSelect));
OCI_Commit(cn);
rs = OCI_GetResultset(st);
while (OCI_FetchNext(rs)) //循環存儲表中主鍵紀錄的值
{
const char *value;
value = OCI_GetString(rs,1);
if(strcmp(value,keyValue)!=0)
{
printf("所要插入的數據已存在,修改失敗!");
return false;
}
}
}
char *fkTableName,*fkFieldName;
flag = 0;
memset( temp_key, '\0', sizeof(temp_key));
for(int i=0;i<fknum;i++)
{
sqlUpdateSelect = "select key from ";
tempTableN = temp_value[i][0];
fkTableName = fkSign[i][0];
if(strcmp(tempTableN,"")==0)
{
break;
}
strcpy(temp_key[i][0],tempTableN);
sqlUpdateSelect.append(tempTableN);
sqlUpdateSelect.append(" where ");
for(int j=1;j<20;j++)
{
tempField = temp_value[i][j];
fkFieldName = fkSign[i][j];
if(strcmp(tempField,"")==0)
{
break;
}
if(flag==1)
{
sqlUpdateSelect.append(" and ");
}
else
{
flag=1;
}
sqlUpdateSelect.append(fkFieldName);
sqlUpdateSelect.append(" = \'");
sqlUpdateSelect.append(tempField);
sqlUpdateSelect.append("\'");
}
flag = 0;
chSqlUpdateSelect = sqlUpdateSelect.c_str();
p = 1;
if (cn)
{
st = OCI_StatementCreate(cn);
OCI_ExecuteStmt(st,MT(chSqlUpdateSelect));
OCI_Commit(cn);
rs = OCI_GetResultset(st);
while (OCI_FetchNext(rs)) //循環存儲表中主鍵紀錄的值
{
const char *value;
value = OCI_GetString(rs,1);
strcpy(temp_key[i][p],value);
p++;
}
//n = OCI_GetRowCount(rs);
}
}
char *tName;
for(int k=0;k<20;k++)
{
tName = temp_key[k][0];
if(strcmp(tName,"")==0)
{
break;
}
for(int i=0;i<fknum;i++)
{
tempTableN = fkSign[i][0];
if(strcmp(tName,tempTableN)==0)
{
for(int j=1;j<20;j++)
{
tempField = temp_key[k][j];
if(strcmp(tempField,"")==0)
{
break;
}
strcpy(updatefeild[updnum][0][0],"tablename");
strcpy(updatefeild[updnum][1][0],tempTableN);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -