亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? vc_oracle2.txt

?? 在vc中創建數據庫
?? TXT
?? 第 1 頁 / 共 5 頁
字號:

								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;
			}
		}		
	}
}

int tables::deleteF()                       //刪除有缺陷,只能對沒有外鍵關聯的數據進行刪除,有關聯的不能刪
{
	bool delreturn;

	string sqlDelete;

	const char *chSqlDelete;
	
	char *key_value; 

	delreturn = delcheck();

	if(delreturn ==true)
	{
		for(int i=0;i<1024;i++)
		{
			key_value = strdup(keyValue[i]);

			if(strcmp(key_value,"")==0)
			{
				break;
			}

			sqlDelete="delete from ";

			sqlDelete.append(tableName);

			sqlDelete.append(" where key = \'");

			sqlDelete.append(key_value);

			sqlDelete.append("\'");

			chSqlDelete = sqlDelete.c_str();

			cn = OCI_ConnPoolGetConnection(pool);

			if (cn)
			{
				st = OCI_StatementCreate(cn);
					
				OCI_ExecuteStmt(st,MT(chSqlDelete));

				OCI_Commit(cn);	

				rs = OCI_GetResultset(st);
			}
		}

		printf("有%d條記錄被成功刪除\n",i);

		return 0;
	}
	else
	{
		printf("刪除失敗!");

		return -1;
	}
}	

bool tables::delcheck()
{
	string sqlDeleteSelect,sqlPkSelect,sqlDelSelect;

	const char *chSqlDeleteSelect,*chSqlPkSelect,*chSqlDelSelect;

	char deleteKey[1024][20];

	char key_value[1024][20];

	int flag = 0,n = 0,num = 0;

	int get_num = fieldDeleteCount - 1;

	char *tempTableName,*tempFieldName,*tempFkColum;

	cn = OCI_ConnPoolGetConnection(pool);

	memset( key_value, '\0', sizeof(key_value));

	memset( pkvalue, '\0', sizeof(pkvalue));

	memset( deleteKey, '\0', sizeof(deleteKey));

	memset( keyValue, '\0', sizeof(keyValue));

	tableName = fieldDelete_array[0].getFieldValue(); 

	sqlDeleteSelect = "select key from ";              //搜索表中有無可刪除的記錄

	sqlDeleteSelect.append(tableName);

	sqlDeleteSelect.append(" where ");

	for(int i=1;i<fieldDeleteCount;i++) 
	{
		fieldName = fieldDelete_array[i].getFieldName();

		fieldValue = fieldDelete_array[i].getFieldValue();

		if(flag==1)
		{
			sqlDeleteSelect.append(" and ");
		}
		else
		{
			flag=1;
		}

		sqlDeleteSelect.append(fieldName);

		sqlDeleteSelect.append(" = \'");

		sqlDeleteSelect.append(fieldValue);

		sqlDeleteSelect.append("\'");
	}

	chSqlDeleteSelect = sqlDeleteSelect.c_str();
		
	if (cn)
	{
		st = OCI_StatementCreate(cn);
			
		OCI_ExecuteStmt(st,MT(chSqlDeleteSelect));

		OCI_Commit(cn);	

		rs = OCI_GetResultset(st);

		while (OCI_FetchNext(rs))                    //循環存儲表中主鍵紀錄的值
		{
				const char *value;

				value = OCI_GetString(rs,1);                  

				strcpy(key_value[trueKeyNum],value);

				trueKeyNum++;
		}

		n  = OCI_GetRowCount(rs);
	}

	if(n==0)
	{
		return false;
	}
	else                                                         //有可刪除的記錄時
	{		
		int fkSignNum = 0,pkSignNum = 0,addKeyNum = 0,selectNum = 0;
		
		fkSignNum = get_FK(tableName);                          //要刪除的表 在fkSignNum個表中作為外鍵

		pkSignNum = get_PK(tableName);                          //要刪除的表中存在pkSignNum個主鍵

		//colNum=fieldDeleteCount - 1;                         //colNum為除去表名列的總列數

		addKeyNum = pkSignNum+1;

		if(fkSignNum == 0)                        //該表不存在字段為他表的外鍵時返回可直接刪除
		{
			for(int i=0;i<1024;i++)
			{
				char *keyV;

				keyV=strdup(key_value[i]);

				if(strcmp(keyV,"")==0)
				{
					break;
				}

				strcpy(keyValue[i],keyV);

			}
			return true;
		}
		else                                                        //該表存在字段為他表的外鍵時需要進行判斷
		{
			char *pkname,*fkname;

			int truepknum = 0;

			flag = 0;

			for(int p=1;p<fieldDeleteCount;p++) 
			{
				fieldName = fieldDelete_array[p].getFieldName();

				for(int q=0;q<pkSignNum;q++)
				{
					pkname = strdup(pkSign[q]);

					if(strcmp(fieldName,pkname)==0)
					{
						truepknum++;
					}
				}
			}
			if(truepknum==pkSignNum)                                          //當主鍵都給齊全了時,即只存在一條需要刪除的記錄時
			{
				for(int j=0;j<fkSignNum;j++)                          
				{
					tempTableName=fkSign[j][0];

					sqlDeleteSelect = "select * from ";

					sqlDeleteSelect.append(tempTableName);

					sqlDeleteSelect.append(" where ");

					for(int k=1;k<20;k++)
					{
						fkname = strdup(fkSign[j][k]);

						if(strcmp(fkname,"")==0)
						{
							break;
						}

						for(int i=1;i<fieldDeleteCount;i++) 
						{
							fieldName = fieldDelete_array[i].getFieldName();

							fieldValue = fieldDelete_array[i].getFieldValue();

							if(strcmp(fieldName,fkname)==0)
							{
								if(flag==1)
								{
									sqlDeleteSelect.append(" and ");
								}
								else
								{
									flag=1;
								}
								sqlDeleteSelect.append(fieldName);

								sqlDeleteSelect.append(" =\'");

								sqlDeleteSelect.append(fieldValue);

								sqlDeleteSelect.append("\'");
							}
						}
					}
					chSqlDeleteSelect = sqlDeleteSelect.c_str();
		
					cn = OCI_ConnPoolGetConnection(pool);

					if (cn)
					{
						st = OCI_StatementCreate(cn);
									
						OCI_ExecuteStmt(st,MT(chSqlDeleteSelect));

						OCI_Commit(cn);	

						rs = OCI_GetResultset(st);

						while (OCI_FetchNext(rs))
						{
						}

						n  = OCI_GetRowCount(rs);

						flag=0;

						if(n!=0)
						{
							return false;
						}
					}				
				}

				for(int i=0;i<1024;i++)
				{
					char *keyV;

					keyV=strdup(key_value[i]);

					if(strcmp(keyV,"")==0)
					{
						break;
					}

					strcpy(keyValue[i],keyV);
				}
				return true;
			}

			if(truepknum<pkSignNum)                                            //當沒有給齊全pk鍵時,即可能存在多條需要刪除的記錄時
			{
				sqlPkSelect = "select key,";

				for(int y=0;y<pkSignNum;y++)
				{
					tempFieldName = pkSign[y];

					if(flag==1)
					{
						sqlPkSelect.append(",");
					}
					else
					{
						flag=1;
					}

					sqlPkSelect.append(tempFieldName);

				}

				sqlPkSelect.append(" from ");

				sqlPkSelect.append(tableName);

				sqlPkSelect.append(" where ");

				flag = 0;

				for(int i=1;i<fieldDeleteCount;i++) 
				{
					fieldName = fieldDelete_array[i].getFieldName();

					fieldValue = fieldDelete_array[i].getFieldValue();

					if(strcmp(fieldName,"") == 0)
					{
						break;
					}

					if(flag==1)
					{
						sqlPkSelect.append(" and ");
					}
					else
					{
						flag = 1;
					}

					sqlPkSelect.append(fieldName);

					sqlPkSelect.append(" = \'");

					sqlPkSelect.append(fieldValue);

					sqlPkSelect.append("\'");					
				}

				chSqlPkSelect = sqlPkSelect.c_str();
			
				cn = OCI_ConnPoolGetConnection(pool);

				if (cn)
				{					
					st = OCI_StatementCreate(cn);
								
					OCI_ExecuteStmt(st,MT(chSqlPkSelect));

					OCI_Commit(cn);	

					rs = OCI_GetResultset(st);

					int c=0;

					while (OCI_FetchNext(rs))                    //循環存儲表中主鍵紀錄的值
					{
						const char *value;

						int d=0;

						for(int b=1;b<=addKeyNum;b++)
						{
							value = OCI_GetString(rs,b);                  

							d = b-1;

							strcpy(pkvalue[c][d],value);
						}

						c++;
					}

					selectNum  = OCI_GetRowCount(rs);				
				}					

				for(int f=0;f<selectNum;f++)
				{					
					char *pkTrueValue,*del_key;

					int add_num;

					int nn = 0;

					for(int j=0;j<fkSignNum;j++)
					{
						sqlDelSelect = "select * from ";             //搜尋出關聯的外鍵,并將關聯外鍵的對應本表key存入為不可刪除的值

						flag = 0;

						tempTableName=fkSign[j][0];

						del_key = strdup(pkvalue[f][0]);

						sqlDelSelect.append(tempTableName);

						sqlDelSelect.append(" where ");

						for(int x=1;x<20;x++)
						{
							tempFkColum = fkSign[j][x];

							if(strcmp(tempFkColum,"")==0)
							{
								break;
							}

							for(int y=0;y<pkSignNum;y++)
							{
								add_num = y+1;

								tempFieldName = pkSign[y];

								pkTrueValue=strdup(pkvalue[f][add_num]);

								if(strcmp(tempFieldName,tempFkColum) == 0)
								{
									if(flag==1)
									{
										sqlDelSelect.append(" and ");
									}
									else
									{
										flag=1;
									}

									sqlDelSelect.append(tempFieldName);

									sqlDelSelect.append(" = \'");

									sqlDelSelect.append(pkTrueValue);

									sqlDelSelect.append("\'");	
								}				
							}						
						}
						chSqlDelSelect = sqlDelSelect.c_str();
			
						cn = OCI_ConnPoolGetConnection(pool);

						if (cn)
						{
							st = OCI_StatementCreate(cn);
								
							OCI_ExecuteStmt(st,MT(chSqlDelSelect));

							OCI_Commit(cn);	

							rs = OCI_GetResultset(st);

							while (OCI_FetchNext(rs))
							{
							}

							nn  = OCI_GetRowCount(rs);

							if(nn!=0)
							{	
								strcpy(deleteKey[deleteNum],del_key);                     //將不可以刪除的紀錄的key放入數組中

								deleteNum++;	
							}
						}
					}
				}
				int def = 0,q=0;

				char *delvalues,*keyvalues;	

				int response;

				if(deleteNum!=0)                                               //不可刪除的數據存在     
				{
					for(int p=0;p<trueKeyNum;p++)                              //不進行級聯刪除時,取出兩個數組中的不同值對比在進行刪除。
					{
						printf("您確定要全部刪除該數據嗎?(包括它表關聯引用)。請返回1/0確認,按回車鍵結束!yes--1,no--0\n");

						scanf("%d",&response);

						if (response == 1)                                         //不管外鍵關聯刪除
						{
							char *del_key;

							int q = 0;

							for(int f=0;f<selectNum;f++)
							{
								del_key = strdup(pkvalue[f][0]);

								strcpy(keyValue[q],del_key);

								q++;
							}

							return true;
						}

						if(response == 0)                                     //只刪除可刪除的數據,外鍵關聯數據不進行刪除
						{
							for(int g=0;g<deleteNum;g++)                           //?還有問題
							{
								delvalues = strdup(deleteKey[g]);

								keyvalues = strdup(key_value[p]);

								if(strcmp(delvalues,keyvalues)!=0)
								{
									def = 0;
								}
								else
								{
									def = 1;

									break;
								}

								def =def || 0;
							}
							if(def==0)
							{
								strcpy(keyValue[q],keyvalues);
								
								q++;
							}
							def = 0;
																				
						}
						
						return true;

					}
				}
				else                                                   //不可刪除的數據不存在
				{
					char *del_key;

					int q = 0;

					for(int f=0;f<selectNum;f++)
					{
						del_key = strdup(pkvalue[f][0]);

						strcpy(keyValue[q],del_key);

						q++;
					}

					return true;
				}				
			}				
		}
	}
}

int tables::get_FK(char *tableN)
{
	int fkSignNum = 0;

	memset( fkSign, '\0', sizeof(fkSign));

	for(int j=0;j<20;j++)
	{
		const char *Table_Name=table_array[j][0][0]; 

		if(strcmp(Table_Name,"") == 0)
		{
			break;
		}

		if(strcmp(Table_Name,tableN) != 0)
		{
			for(int k=1;k<20;k++)              
			{
				const char *fk_sign=table_array[j][0][k];

				if(strcmp(fk_sign,"") == 0)
				{
					break;
				}
				else
				{
					char *pre = 0;

					char *result = 0;								
								
					pre= strdup(fk_sign);

					char *temp = strstr(pre,".");

					result=temp+1;

					temp[0]='\0';

					if(strcmp(pre,tableN) == 0)
					{
						strcpy(fkSign[fkSignNum][0],Table_Name);	

						int k=1;
						
						while

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日本视频在线| 天堂午夜影视日韩欧美一区二区| 亚洲色大成网站www久久九九| 日日摸夜夜添夜夜添精品视频 | 国产精品美女久久久久aⅴ| 视频一区国产视频| 91久久精品国产91性色tv| 久久久噜噜噜久久人人看 | 亚洲国产精品一区二区久久| 国产真实乱对白精彩久久| 欧美日韩精品一区二区三区蜜桃 | 91精品国产综合久久精品性色| 国产精品欧美经典| 国产一区二区在线免费观看| 欧美日韩久久一区二区| 亚洲一区二区中文在线| 91亚洲男人天堂| 国产精品二区一区二区aⅴ污介绍| 久久99精品久久久久久| 717成人午夜免费福利电影| 亚洲sss视频在线视频| 色综合久久中文字幕综合网| 国产精品天天摸av网| 国产成人免费在线视频| 26uuu精品一区二区三区四区在线| 天天综合色天天综合色h| 91官网在线观看| 亚洲五码中文字幕| 精品污污网站免费看| 一区二区激情小说| 欧美午夜精品久久久久久孕妇| 亚洲人亚洲人成电影网站色| 99久久伊人精品| 亚洲日本青草视频在线怡红院| 97久久精品人人做人人爽 | 麻豆91在线观看| 欧美精品粉嫩高潮一区二区| 偷拍与自拍一区| 日韩精品一区国产麻豆| 国产一区二区三区四| 国产午夜亚洲精品午夜鲁丝片 | 成人动漫一区二区在线| 久久亚洲精精品中文字幕早川悠里| 精品一区免费av| 国产三级精品视频| 99re免费视频精品全部| 亚洲狠狠爱一区二区三区| 欧美在线播放高清精品| 日韩激情中文字幕| 久久免费国产精品| 91在线视频免费91| 日韩激情视频在线观看| 久久久久久免费| 色8久久精品久久久久久蜜| 亚洲chinese男男1069| 欧美va亚洲va| 99re热这里只有精品免费视频| 亚洲成av人片在www色猫咪| 2021国产精品久久精品| 91首页免费视频| 热久久久久久久| 中文字幕国产一区二区| 911精品国产一区二区在线| 成人综合在线视频| 亚洲成a人片在线不卡一二三区 | 777久久久精品| 懂色av一区二区在线播放| 亚洲v中文字幕| 欧美激情一区二区三区全黄| 欧美日韩精品电影| 国产精品一区二区男女羞羞无遮挡 | 日韩视频在线观看一区二区| 国产高清在线观看免费不卡| 亚洲一区二区三区四区的| 久久久99免费| 欧美精品三级日韩久久| 91香蕉视频在线| 久久成人羞羞网站| 亚欧色一区w666天堂| 亚洲国产成人私人影院tom| 欧美日韩精品电影| 99re视频这里只有精品| 国产一区二区在线观看视频| 粉嫩av一区二区三区| 日韩精品一区第一页| 亚洲色图视频网| 国产日韩欧美一区二区三区综合| 欧美嫩在线观看| 色狠狠桃花综合| 高清日韩电视剧大全免费| 激情五月婷婷综合网| 偷窥少妇高潮呻吟av久久免费| 亚洲天堂福利av| 中文字幕一区二区三区在线观看| 精品对白一区国产伦| 欧美一区二区三区日韩| 欧美日韩在线亚洲一区蜜芽| 91在线视频在线| av网站一区二区三区| 国产91丝袜在线播放0| 精品一区二区三区视频 | 亚洲综合丝袜美腿| 亚洲人成在线播放网站岛国| 国产精品丝袜久久久久久app| 精品国产电影一区二区| 日韩精品一区二区三区四区视频| 欧美日韩三级一区二区| 国产欧美一二三区| 久久九九全国免费| 国产日韩精品久久久| 国产亚洲精久久久久久| 久久综合狠狠综合久久综合88| 欧美哺乳videos| 久久久久久久久一| 欧美国产禁国产网站cc| 国产精品久久久一本精品| 国产精品剧情在线亚洲| 亚洲视频你懂的| 亚洲午夜久久久久久久久久久| 亚洲妇熟xx妇色黄| 日本免费在线视频不卡一不卡二 | 日韩一级成人av| 日韩视频在线你懂得| 欧美精品一区男女天堂| 久久九九国产精品| 18涩涩午夜精品.www| 亚洲一区二区影院| 欧美bbbbb| 国产成人精品一区二| 99re8在线精品视频免费播放| 色婷婷国产精品| 日韩欧美视频一区| 中文字幕成人av| 一区二区三区免费在线观看| 亚洲成人动漫一区| 国产精品综合视频| 色哟哟国产精品| 精品美女一区二区三区| 欧美国产成人在线| 亚洲va欧美va天堂v国产综合| 久久99热狠狠色一区二区| 成人黄色av网站在线| 欧美人与禽zozo性伦| 欧美第一区第二区| 亚洲免费观看视频| 久久国产夜色精品鲁鲁99| 91免费视频观看| 日韩精品一区二区三区中文精品 | 99re免费视频精品全部| 91精品蜜臀在线一区尤物| 国产欧美综合色| 日韩专区在线视频| 成人免费福利片| 91精品国产综合久久福利 | 国产欧美一区二区精品秋霞影院| 亚洲精品中文字幕在线观看| 精品制服美女丁香| 欧美日韩综合在线免费观看| 久久久一区二区三区| 午夜伦欧美伦电影理论片| 成人精品国产一区二区4080 | 在线中文字幕一区| 精品成人免费观看| 亚洲成人综合视频| 不卡一二三区首页| 欧美大胆一级视频| 亚洲国产欧美在线| 99re视频这里只有精品| 久久九九影视网| 久久国产精品区| 欧美久久免费观看| 中文字幕日韩欧美一区二区三区| 美女视频一区在线观看| 欧美无砖砖区免费| 亚洲手机成人高清视频| 国产大陆精品国产| 欧美精品一区二区高清在线观看| 亚洲国产欧美在线人成| 色综合一区二区| 中文字幕中文乱码欧美一区二区| 久久精品久久久精品美女| 欧美午夜精品久久久久久孕妇| 亚洲欧美一区二区三区久本道91| 成人一级黄色片| 国产视频一区不卡| 国产丶欧美丶日本不卡视频| 欧美大片免费久久精品三p| 麻豆成人综合网| 日韩一区二区三区免费看 | 国产成a人亚洲精| 精品久久久久久久人人人人传媒 | 亚洲国产一区二区三区青草影视| 99在线视频精品| 亚洲人成影院在线观看| 91丝袜高跟美女视频| 中文字幕日本乱码精品影院| 99免费精品视频| 亚洲资源在线观看| 欧美三级韩国三级日本一级| 亚洲精品午夜久久久|