?? vc_oracle2.txt
字號(hào):
if(flag==1)
{
sqlUpdateSelect.append(" and ");
}
else
{
flag=1;
}
sqlUpdateSelect.append(fieldName);
sqlUpdateSelect.append(" = \'");
sqlUpdateSelect.append(fieldValue);
sqlUpdateSelect.append("\'");
}
chSqlUpdateSelect = sqlUpdateSelect.c_str();
cn = OCI_ConnPoolGetConnection(pool);
if (cn)
{
st = OCI_StatementCreate(cn);
OCI_ExecuteStmt(st,MT(chSqlUpdateSelect));
OCI_Commit(cn);
rs = OCI_GetResultset(st);
while (OCI_FetchNext(rs))
{
}
n = OCI_GetRowCount(rs);
if(n!=0)
{
printf("說要修改的內(nèi)容已存在,不需要進(jìn)行修改!");
return false;
}
}
if(fkToPknum==0) //已經(jīng)為表鏈的最前端,即不引用其它表的字段
{
if(strcmp(keyName,"key")==0) //判斷是否存在key條件,如果存在即是對(duì)一條記錄進(jìn)行修改 ?
{
memset( pkColumn, '\0', sizeof(pkColumn));
for(int i=2;i<fieldUpdateCount;i++)
{
fieldName = fieldUpdate_array[i].getFieldName();
fieldValue = fieldUpdate_array[i].getFieldValue();
for(int j=0;j<pknum;j++)
{
pkname = pkSign[j];
if(strcmp(fieldName,pkname)==0)
{
strcpy(pkColumn[n++],pkname);
truePknum++;
}
}
}
if(truePknum == pknum) //所給數(shù)據(jù)中PK鍵都給齊全了,即都要進(jìn)行修改,
{
for(int i=0;i<pknum;i++) //用于統(tǒng)計(jì)主鍵是否需要進(jìn)行修改
{
pkname = pkSign[i];
pkvalue = select_value(tableName,pkname,keyName,keyValue);
for(int i=2;i<fieldUpdateCount;i++)
{
fieldName = fieldUpdate_array[i].getFieldName();
fieldValue = fieldUpdate_array[i].getFieldValue();
if(strcmp(pkname,fieldName)==0)
{
if(strcmp(pkvalue,fieldValue)==0)
{
Unum++; //Unum用于統(tǒng)計(jì)沒有修改了的主鍵數(shù)
}
}
}
}
if(Unum!=pknum) //主鍵需要修改
{
flag = 0;
sqlUpdateSelect = "select key from "; //查詢所要修改的主鍵是否已經(jīng)存在,已存在則修改失敗
sqlUpdateSelect.append(tableName);
sqlUpdateSelect.append(" where ");
for(int i=2;i<fieldUpdateCount;i++)
{
fieldName = fieldUpdate_array[i].getFieldName();
fieldValue = fieldUpdate_array[i].getFieldValue();
for(int j=0;j<pknum;j++)
{
pkname = pkSign[j];
if(strcmp(fieldName,pkname)==0)
{
if(flag==1)
{
sqlUpdateSelect.append(" and ");
}
else
{
flag=1;
}
sqlUpdateSelect.append(fieldName);
sqlUpdateSelect.append(" = \'");
sqlUpdateSelect.append(fieldValue);
sqlUpdateSelect.append("\'");
}
}
}
chSqlUpdateSelect = sqlUpdateSelect.c_str();
cn = OCI_ConnPoolGetConnection(pool);
if (cn)
{
st = OCI_StatementCreate(cn);
OCI_ExecuteStmt(st,MT(chSqlUpdateSelect));
OCI_Commit(cn);
rs = OCI_GetResultset(st);
while (OCI_FetchNext(rs))
{
value = OCI_GetString(rs,1);
if(strcmp(value,keyValue)!=0)
{
printf("所要修改的值主鍵重復(fù),修改失敗!");
return false;
}
}
nn = OCI_GetRowCount(rs);
}
if(nn==0)
{
int q = 0,updnum = 0; //不存在主鍵沖突
memset( updatefeild, '\0', sizeof(updatefeild));
if(fknum==0) //沒有他表對(duì)該表內(nèi)容進(jìn)行引用
{
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 //他表對(duì)該表內(nèi)容進(jìn)行了引用,將他表內(nèi)容也進(jìn)行修改
{
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)) //循環(huán)存儲(chǔ)表中主鍵紀(jì)錄的值
{
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);
}
}
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)) //循環(huán)存儲(chǔ)表中主鍵紀(jì)錄的值
{
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);
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<fieldUpdateCount;i++)
{
fieldName = fieldUpdate_array[i].getFieldName();
fieldValue = fieldUpdate_array[i].getFieldValue();
if(strcmp(fkFieldName,fieldName)==0)
{
strcpy(updatefeild[updnum][0][q],fieldName); //updnum表示有多少條記錄要改,此處為一
strcpy(updatefeild[updnum][1][q],fieldValue);
q++;
}
}
}
updnum++;
}
}
}
}
return true;
}
}
}
else //主鍵信息不用修改時(shí),要看是否引用了其它表的字段,即fkToPknum是否為0,fkToPk數(shù)組
{
int q = 0,updnum = 0; //沒有修改主鍵時(shí),返回直接進(jìn)行修改
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;
}
}
if(truePknum<pknum) //所給數(shù)據(jù)中PK鍵未給齊全時(shí)
{
if(truePknum==0) //truePknum為實(shí)際包含了的PK數(shù)
{
int q = 0,updnum = 0; //不存在主鍵沖突,沒有PK要修改
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( pkColumnValue, '\0', sizeof(pkColumnValue));
for(int i=0;i<pknum;i++) //用于統(tǒng)計(jì)主鍵是否需要進(jìn)行修改
{
pkname = pkSign[i];
pkvalue = select_value(tableName,pkname,keyName,keyValue);
strcpy(pkColumnValue[i],pkvalue);
}
for(int i=0;i<pknum;i++)
{
pkname = pkSign[i];
tempField = pkColumnValue[i];
for(int j=0;j<fieldUpdateCount;j++)
{
fieldName = fieldUpdate_array[j].getFieldName();
fieldValue = fieldUpdate_array[j].getFieldValue();
if(strcmp(pkname,fieldName)==0)
{
if(strcmp(tempField,fieldValue)!=0)
{
strcpy(pkColumnValue[i],fieldValue);
Unum++; //Unum用于統(tǒng)計(jì)沒有修改了的主鍵數(shù)
}
}
}
}
if(Unum!=0) //主鍵需要修改
{
flag = 0;
sqlUpdateSelect = "select key from "; //查詢所要修改的主鍵是否已經(jīng)存在,已存在則修改失敗
sqlUpdateSelect.append(tableName);
sqlUpdateSelect.append(" where ");
for(int i=0;i<pknum;i++)
{
pkname = pkSign[i];
tempField = pkColumnValue[i];
if(flag==1)
{
sqlUpdateSelect.append(" and ");
}
else
{
flag=1;
}
sqlUpdateSelect.append(pkname);
sqlUpdateSelect.append(" = \'");
sqlUpdateSelect.append(tempField);
sqlUpdateSelect.append("\'");
}
chSqlUpdateSelect = sqlUpdateSelect.c_str();
cn = OCI_ConnPoolGetConnection(pool);
if (cn)
{
st = OCI_StatementCreate(cn);
OCI_ExecuteStmt(st,MT(chSqlUpdateSelect));
OCI_Commit(cn);
rs = OCI_GetResultset(st);
while (OCI_FetchNext(rs))
{
value = OCI_GetString(rs,1);
if(strcmp(value,keyValue)!=0)
{
printf("所要修改的值主鍵重復(fù),修改失敗!");
return false;
}
}
nn = OCI_GetRowCount(rs);
}
if(nn==0) //所要修改的內(nèi)容不存在,可以修改
{
int q = 0,updnum = 0; //不存在主鍵沖突
memset( updatefeild, '\0', sizeof(updatefeild));
if(fknum==0) //沒有他表對(duì)該表內(nèi)容進(jìn)行引用
{
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 //他表對(duì)該表內(nèi)容進(jìn)行了引用,將他表內(nèi)容也進(jìn)行修改
{
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;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -