⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vc_oracle2.txt

📁 在vc中创建数据库
💻 TXT
📖 第 1 页 / 共 5 页
字号:

								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 + -