首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

哪位大哥帮小弟我看看这段存储程序,小弟我把分全给了。多谢了

2013-11-18 
哪位大哥帮我看看这段存储程序,我把分全给了。。。谢谢了void __fastcall TForm1::Button1Click(TObject *Sen

哪位大哥帮我看看这段存储程序,我把分全给了。。。谢谢了

void __fastcall TForm1::Button1Click(TObject *Sender)
{ // 打开ACESS文件读取数据到表格
  FromFile="";
  OpenDialog1->InitialDir=GetCurrentDir();
  OpenDialog1->Title="选择Access表格文件";
  OpenDialog1->Filter ="Access files (*.mdb) | *.mdb";

  if (OpenDialog1->Execute())
     FromFile=OpenDialog1->FileName;

  if(ExtractFileName(FromFile).IsEmpty())  return;
  if(!FileExists(FromFile))
     {
      MessageBox(0, "设定ACCESS表格文件无法连接!", "提示", MB_OK|MB_ICONWARNING);
      return;
     }
  Edit1->Text = FromFile;                              // 这个edit控件显示一个文件路径 

  AnsiString ID; 
  float V1,V2;
  int U1,U2,D1,D2,K0,K;
  int iLine = 1;     // StringGrid1->RowCount;         
  StringGrid1->RowCount = 2;                             // 设置这个StringGrid 控件的行数为2
  
  ADOQuery1->Close();                                   // 关闭之前的ADOQuery1(如果之前有open)
  ADOQuery1->SQL->Clear();                         // 清除之前这个ADOQuery1的sql语句(如果有)
  ADOQuery1->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+FromFile;             //数据库连接字符串,可以看出要连接的是个access数据库
  AnsiString sql = "select * from IRData order by K0";         //填写sql语句,从IRData这个表中查询所有记录,结果集按 KO 字段来排序
  ADOQuery1->SQL->Add(sql);                                       //把上面这个sql语句赋给ADOQuery1.sql属性
  try                                                                      // try ...catch 块包裹代码以便捕获异常信息 
  {
      ADOQuery1->Open();                                   // 连接打开数据库提交sql查询 
  }
  catch(...)                                                                  // 上面的open操作如果发生错误或异常就执行下面的代码 
  {
      ADOQuery1->Close();                                                  // 关闭对数据库的连接 
      ShowMessage("ACCESS表格文件无法连接!");                    // 关闭对数据库的连接 
      return;                                                             //retrun返回,即退出这个函数不再往下执行 
  }

  // 如果上面代码执行没有进入catch(...) {} 中的代码,以下的代码才可能得到执行    
 // 判断这个ADOQuery查询结果,如果返回的数据集不是空


  if(!ADOQuery1->IsEmpty())                          // IsEmpty返回一个bool值,表示是否为空 
  {
   ADOQuery1->FindFirst();                                // FindFirst函数找出返回的数据集中的第一条记录 
   do


   {
    
     // 把表中查询到的 ID 字段的值用AsString函数转为字符串 赋值给 AnsiString ID;     
     // 如果字符串首位两侧有空格字符,用Trim函数去掉两侧空格字符  
     ID = Trim(ADOQuery1->FieldByName("ID")->AsString);   //ShowMessage(ID);
     if(!ID.IsEmpty())
       {
         V1 = ADOQuery1->FieldByName("V1")->AsFloat;
         V2 = ADOQuery1->FieldByName("V2")->AsFloat;
         U1 = ADOQuery1->FieldByName("U1")->AsInteger;
         U2 = ADOQuery1->FieldByName("U2")->AsInteger;
         D1 = ADOQuery1->FieldByName("D1")->AsInteger;
         D2 = ADOQuery1->FieldByName("D2")->AsInteger;
         K0 = ADOQuery1->FieldByName("K0")->AsInteger;
         K  = ADOQuery1->FieldByName("K") ->AsInteger;
         StringGrid1->Cells[0][iLine] = IntToStr(iLine);
         StringGrid1->Cells[1][iLine] =  ID;
         StringGrid1->Cells[2][iLine] =  FloatToStr( ((long)( V1 *10))/10.0 );  // 保留1位小数
         StringGrid1->Cells[3][iLine] =  FloatToStr( ((long)( V2 *10))/10.0 );  // 保留1位小数
         StringGrid1->Cells[4][iLine] =  IntToStr( U1 );
         StringGrid1->Cells[5][iLine] =  IntToStr( U2 );
         StringGrid1->Cells[6][iLine] =  IntToStr( D1 );
         StringGrid1->Cells[7][iLine] =  IntToStr( D2 );
         StringGrid1->Cells[8][iLine] =  IntToStr( K0 );
         StringGrid1->Cells[9][iLine] =  IntToStr( K );
         StringGrid1->RowCount +=1;
         StringGrid1->Row = iLine++;
       }
   }while(ADOQuery1->FindNext() && iLine<=28);
  }
  ADOQuery1->Close();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)
{ // 保存表格到ACESS数据库

  ADOQuery1->Close();
  ADOQuery1->SQL->Clear();
  ADOQuery1->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+FromFile;
  AnsiString sql = "select * from IRData order by ID";
  ADOQuery1->SQL->Add(sql);
  try
  {
      ADOQuery1->Open();
  }
  catch(...)
  {
      ADOQuery1->Close();
      ShowMessage("ERROR...ACCESS表格文件无法连接!");
      return;
  }

  int iLine = StringGrid1->RowCount;
  if(iLine<=2)
    {
      ADOQuery1->Close();
      ShowMessage("ERROR...缺少表格数据!");
      return;
    }

  ADOQuery1->SQL->Clear();
  ADOQuery1->SQL->Add("delete from IRData");
  ADOQuery1->ExecSQL();   // 删除IRData表中原数据, 准备写入以下新数据。。。

  for(iLine=1; iLine<StringGrid1->RowCount; iLine++)
    {
      ADOQuery1->SQL->Clear();
      ADOQuery1->SQL->Add("INSERT INTO IRData(ID, V1, V2, U1, U2, D1, D2, K0,K)");
      ADOQuery1->SQL->Add(" VALUES(:IDV,:V1V,:V2V,:U1V,:U2V,:D1V,:D2V,:K0V,:KV)");
      ADOQuery1->Parameters->ParamByName("IDV")->Value = StringGrid1->Cells[1][iLine] ;
      ADOQuery1->Parameters->ParamByName("V1V")->Value = StrToFloatDef(StringGrid1->Cells[2][iLine], 0);
      ADOQuery1->Parameters->ParamByName("V2V")->Value = StrToFloatDef(StringGrid1->Cells[3][iLine], 0);
      ADOQuery1->Parameters->ParamByName("U1V")->Value = StrToIntDef(StringGrid1->Cells[4][iLine], 0);
      ADOQuery1->Parameters->ParamByName("U2V")->Value = StrToIntDef(StringGrid1->Cells[5][iLine], 0);


      ADOQuery1->Parameters->ParamByName("D1V")->Value = StrToIntDef(StringGrid1->Cells[6][iLine], 0);
      ADOQuery1->Parameters->ParamByName("D2V")->Value = StrToIntDef(StringGrid1->Cells[7][iLine], 0);
      ADOQuery1->Parameters->ParamByName("K0V")->Value = StrToIntDef(StringGrid1->Cells[8][iLine], 0);
      ADOQuery1->Parameters->ParamByName("KV")->Value = StrToIntDef(StringGrid1->Cells[9][iLine], 0);
      ADOQuery1->ExecSQL();
    }
  ADOQuery1->Close();
  ShowMessage("ACCESS表格数据成功保存!");
}
//---------------------------------------------------------------------------

void __fastcall TForm1::OnSelectCelLx(TObject *Sender, int ACol, int ARow,
      bool &CanSelect)
{ // 设置某些列不可修改(只允许修改最后2列即"新定义按钮"和"绘图选项")
 if(ACol==9||ACol==10)
   StringGrid1->Options<<goEditing;
 else
   StringGrid1->Options>>goEditing;
}
[解决办法]
这么高的分,必须回复:

void __fastcall TForm1::Button1Click(TObject *Sender)
{ // 打开ACESS文件读取数据到表格
  String FromFile=""; // 声明一个字符串变量,用于存储用户选择的Access数据库文件的全路径
  OpenDialog1->InitialDir=GetCurrentDir(); // 设置文件选择对话框OpenDialog的默认目录为当前目录,这里不建议使用GetCurrentDir取得当前目录
  OpenDialog1->Title="选择Access表格文件"; // 设置了文件选择对话框OpenDialog的标题
  OpenDialog1->Filter ="Access files (*.mdb) 
[解决办法]
 *.mdb"; // 文件选择对话框OpenDialog显示的文件类型

  if (OpenDialog1->Execute()) // 如果用户使用了文件选择对话框OpenDialog
     FromFile=OpenDialog1->FileName; // 将文件全路径赋给变量

  if(ExtractFileName(FromFile).IsEmpty())  return; // 判断可执行文件名为空则返回,此处用的怪异不推荐
  if(!FileExists(FromFile)) // 判断数据库文件是否存在
     {
      MessageBox(0, "设定ACCESS表格文件无法连接!", "提示", MB_OK
[解决办法]
MB_ICONWARNING);
      return;
     }
  Edit1->Text = FromFile;                              // 这个edit控件显示一个文件路径 

  AnsiString ID; 
  float V1,V2;
  int U1,U2,D1,D2,K0,K;
  int iLine = 1;     // StringGrid1->RowCount;         
  StringGrid1->RowCount = 2;                             // 设置这个StringGrid 控件的行数为2
  
  ADOQuery1->Close();                                   // 关闭之前的ADOQuery1(如果之前有open)
  ADOQuery1->SQL->Clear();                         // 清除之前这个ADOQuery1的sql语句(如果有)
  ADOQuery1->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+FromFile;             //数据库连接字符串,可以看出要连接的是个access数据库
  AnsiString sql = "select * from IRData order by K0";         //填写sql语句,从IRData这个表中查询所有记录,结果集按 KO 字段来排序
  ADOQuery1->SQL->Add(sql);                                       //把上面这个sql语句赋给ADOQuery1.sql属性
  try                                                                      // try ...catch 块包裹代码以便捕获异常信息 
  {
      ADOQuery1->Open();                                   // 连接打开数据库提交sql查询 


  }
  catch(...)                                                                  // 上面的open操作如果发生错误或异常就执行下面的代码 
  {
      ADOQuery1->Close();                                                  // 关闭对数据库的连接 
      ShowMessage("ACCESS表格文件无法连接!");                    // 关闭对数据库的连接 
      return;                                                             //retrun返回,即退出这个函数不再往下执行 
  }

  // 如果上面代码执行没有进入catch(...) {} 中的代码,以下的代码才可能得到执行    
 // 判断这个ADOQuery查询结果,如果返回的数据集不是空


  if(!ADOQuery1->IsEmpty())                          // IsEmpty返回一个bool值,表示是否为空 
  {
   ADOQuery1->FindFirst();                                // FindFirst函数找出返回的数据集中的第一条记录 
   do
   {
    
     // 把表中查询到的 ID 字段的值用AsString函数转为字符串 赋值给 AnsiString ID;     
     // 如果字符串首位两侧有空格字符,用Trim函数去掉两侧空格字符  
     ID = Trim(ADOQuery1->FieldByName("ID")->AsString);   //ShowMessage(ID);
     if(!ID.IsEmpty()) // 如果ID这个字符串不为空
       {
         V1 = ADOQuery1->FieldByName("V1")->AsFloat; // 将查询到的指定列数据赋值给变量,下同
         V2 = ADOQuery1->FieldByName("V2")->AsFloat;
         U1 = ADOQuery1->FieldByName("U1")->AsInteger;
         U2 = ADOQuery1->FieldByName("U2")->AsInteger;
         D1 = ADOQuery1->FieldByName("D1")->AsInteger;
         D2 = ADOQuery1->FieldByName("D2")->AsInteger;
         K0 = ADOQuery1->FieldByName("K0")->AsInteger;
         K  = ADOQuery1->FieldByName("K") ->AsInteger;

         StringGrid1->Cells[0][iLine] = IntToStr(iLine); // 将上面的结果填充到StringGrid控件的iLine行用于显示,下同
         StringGrid1->Cells[1][iLine] =  ID;
         StringGrid1->Cells[2][iLine] =  FloatToStr( ((long)( V1 *10))/10.0 );  // 保留1位小数
         StringGrid1->Cells[3][iLine] =  FloatToStr( ((long)( V2 *10))/10.0 );  // 保留1位小数
         StringGrid1->Cells[4][iLine] =  IntToStr( U1 );
         StringGrid1->Cells[5][iLine] =  IntToStr( U2 );
         StringGrid1->Cells[6][iLine] =  IntToStr( D1 );
         StringGrid1->Cells[7][iLine] =  IntToStr( D2 );
         StringGrid1->Cells[8][iLine] =  IntToStr( K0 );
         StringGrid1->Cells[9][iLine] =  IntToStr( K );
         StringGrid1->RowCount +=1; // 总行数加1
         StringGrid1->Row = iLine++; // 选中行加1
       }
   }while(ADOQuery1->FindNext() && iLine<=28); // 循环条件是有下一条记录,同时行数<=28
  }
  ADOQuery1->Close(); // 关闭数据库查询控件
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)
{ // 保存表格到ACESS数据库

  ADOQuery1->Close(); // 先关闭数据库查询控件


  ADOQuery1->SQL->Clear(); // 清空
  ADOQuery1->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+FromFile; // 设置数据库连接串
  AnsiString sql = "select * from IRData order by ID"; // 设置SQL语句
  ADOQuery1->SQL->Add(sql); // 载入SQL语句
  try
  {
      ADOQuery1->Open(); // 执行查询
  }
  catch(...)
  {
      ADOQuery1->Close();
      ShowMessage("ERROR...ACCESS表格文件无法连接!");
      return;
  }

  int iLine = StringGrid1->RowCount; // 取得总行数
  if(iLine<=2)
    {
      ADOQuery1->Close();
      ShowMessage("ERROR...缺少表格数据!");
      return;
    }

  ADOQuery1->SQL->Clear();
  ADOQuery1->SQL->Add("delete from IRData"); // 设置清空表
  ADOQuery1->ExecSQL();   // 删除IRData表中原数据, 准备写入以下新数据。。。

  for(iLine=1; iLine<StringGrid1->RowCount; iLine++)
    {
  // 此处用参数法逐行将StringGrid控件中的行内容插入数据库
      ADOQuery1->SQL->Clear();
      ADOQuery1->SQL->Add("INSERT INTO IRData(ID, V1, V2, U1, U2, D1, D2, K0,K)");
      ADOQuery1->SQL->Add(" VALUES(:IDV,:V1V,:V2V,:U1V,:U2V,:D1V,:D2V,:K0V,:KV)");
      ADOQuery1->Parameters->ParamByName("IDV")->Value = StringGrid1->Cells[1][iLine] ;
      ADOQuery1->Parameters->ParamByName("V1V")->Value = StrToFloatDef(StringGrid1->Cells[2][iLine], 0);
      ADOQuery1->Parameters->ParamByName("V2V")->Value = StrToFloatDef(StringGrid1->Cells[3][iLine], 0);
      ADOQuery1->Parameters->ParamByName("U1V")->Value = StrToIntDef(StringGrid1->Cells[4][iLine], 0);
      ADOQuery1->Parameters->ParamByName("U2V")->Value = StrToIntDef(StringGrid1->Cells[5][iLine], 0);
      ADOQuery1->Parameters->ParamByName("D1V")->Value = StrToIntDef(StringGrid1->Cells[6][iLine], 0);
      ADOQuery1->Parameters->ParamByName("D2V")->Value = StrToIntDef(StringGrid1->Cells[7][iLine], 0);
      ADOQuery1->Parameters->ParamByName("K0V")->Value = StrToIntDef(StringGrid1->Cells[8][iLine], 0);
      ADOQuery1->Parameters->ParamByName("KV")->Value = StrToIntDef(StringGrid1->Cells[9][iLine], 0);
      ADOQuery1->ExecSQL();
    }
  ADOQuery1->Close();
  ShowMessage("ACCESS表格数据成功保存!");
}
//---------------------------------------------------------------------------

void __fastcall TForm1::OnSelectCelLx(TObject *Sender, int ACol, int ARow,
      bool &CanSelect)
{ // 设置某些列不可修改(只允许修改最后2列即"新定义按钮"和"绘图选项")
 if(ACol==9
[解决办法]
ACol==10)
   StringGrid1->Options<<goEditing; // 设置第9和第10列允许编辑行文本
 else
   StringGrid1->Options>>goEditing;


[解决办法]
纠正一下,是数据库文件名为空就返回

热点排行