Конференция "Базы" » Перенос бд с sql на акссес [D7]
 
  • босмолокосос (31.05.17 12:37) [0]
    Здравствуйте .Ребят такая проблемка .После переноса с sql базу данных на акссес программа выдает ошибку .а точнее


    ads.Active:=false;
    ads.CommandText:='select * from organs where organs.oname='+quotedstr(orgname.Text);
    ads.Active:=true;
    if ads.RecordCount=0 then
     begin
      form3.eoname.Text:=orgname.Text;
      form3.showmodal
     end;
    ads.Active:=false;
    ads.CommandText:='select * from res_givers, organs where res_givers.rgfname='+quotedstr(rgfname.Text)+' and res_givers.rgnoname='+quotedstr(rgnoname.Text)+' and res_givers.rgorg=organs.oid and organs.oname='+quotedstr(orgname.Text);
    ads.Active:=true;
    if ads.RecordCount=0 then
     begin
      ads.Active:=false;
      ads.CommandText:='select * from organs where organs.oname='+quotedstr(orgname.Text);
      ads.Active:=true;
      adc.CommandText:='insert into res_givers values('+quotedstr(ads.Recordset.Fields[0].get_value)+', '+quotedstr(rgfname.Text)+', '+quotedstr(rgnoname.Text)+')';
      adc.Execute
     end;
    peopds.Active:=false;
    peopds.Filtered:=false;
    peopds.CommandText:='select * from resolution where rregnum='+quotedstr(regnum.Text)+' and rregdate>=:date';
    peopds.Parameters.ParamByName('date').DataType := ftDate;
    peopds.Parameters.ParamByName('date').Value := regdate.Date;
    peopds.Active:=true;
    if peopds.RecordCount=0 then
     begin
      ads.Active:=false;
      ads.CommandText:='select * from res_givers, organs where res_givers.rgfname='+quotedstr(rgfname.Text)+' and res_givers.rgnoname='+quotedstr(rgnoname.Text)+' and res_givers.rgorg=organs.oid and organs.oname='+quotedstr(orgname.Text);
      ads.Active:=true;
      adc.CommandText:='insert into resolution values(0, ' + quotedstr(ads.Recordset.Fields[0].get_value())+', '+quotedstr(art.Text)+', '+quotedstr(regnum.Text)+', :date1, :date2, :date3, :time, ' + quotedstr(floattostr(0))+')';
      adc.Parameters.ParamByName('date1').DataType := ftDate;
      adc.Parameters.ParamByName('date1').Value := regdate.Date;
      adc.Parameters.ParamByName('date2').DataType := ftDate;
      adc.Parameters.ParamByName('date2').Value := date.Date;
      adc.Parameters.ParamByName('date3').DataType := ftDate;
      adc.Parameters.ParamByName('date3').Value := todate.Date;
      adc.Parameters.ParamByName('time').DataType := ftTime;
      adc.Parameters.ParamByName('time').Value := totime.Time;
      adc.Execute
     end;
    for i:=1 to peoples.count do
     begin
      rgds.Active:=false;
      rgds.CommandText:='select * from cities where cname='+quotedstr(peoples.p[i].city);
      rgds.Active:=true;
      if rgds.RecordCount=0 then
       begin
        adc.CommandText:='insert into cities values('+quotedstr(peoples.p[i].city)+')';
        adc.Execute;
        rgds.Active:=false;
        rgds.Active:=true
       end;
      ads.active:=false;
      ads.CommandText:='select * from peoples where pfname='+quotedstr(peoples.p[i].fname)+' and pnname='+quotedstr(peoples.p[i].nname)+' and poname='+quotedstr(peoples.p[i].oname)+' and pwasborn='+inttostr(peoples.p[i].ywb);
      ads.active:=true;
      if ads.RecordCount=0 then
       begin
        adc.CommandText:='insert into peoples values('+quotedstr(peoples.p[i].fname)+', '+quotedstr(peoples.p[i].nname)+', '+quotedstr(peoples.p[i].oname)+', '+inttostr(peoples.p[i].ywb)+', '+quotedstr(rgds.Recordset.Fields[0].get_value())+', '+quotedstr(peoples.p[i].adress)+')';
        adc.Execute;
        ads.Active:=false;
        ads.Active:=true
       end;
      kind.Filter:='sname='+quotedstr(peoples.p[i].stat);
      kind.Filtered:=true;
      if kind.RecordCount=0 then
       begin
        adc.CommandText:='insert into stat values('+quotedstr(peoples.p[i].stat)+')';
        adc.Execute;
        kind.Active:=false;
        kind.Active:=true
       end;
      peopds.Active:=false;
      peopds.Active:=true;
      adc.CommandText:='insert into who_why values('+quotedstr(peopds.Recordset.Fields[0].get_value())+', '+quotedstr(ads.Recordset.Fields[0].get_value())+', '+quotedstr(kind.Recordset.Fields[0].get_value())+')';
      adc.Execute;
      kind.Filtered:=false
     end;
    form1.Close
    end;

    procedure TForm1.rgfnameChange(Sender: TObject);
    begin
    rgds.Filter:='rgfname='+quotedstr(rgfname.Text);
    rgds.Filtered:=true;
    if rgds.RecordCount=1 then rgnoname.Text:=rgds.Recordset.Fields[1].get_value();
    rgds.Filtered:=false
    end;

    end.

    в запросах insert into res_givers values .Как я понимаю для акссес нужно как то по другому прописывать? ошибка такая(Проект вызвал исключение класса EOleException с сообщением Изменения не были успешно внесены из-за повторящихся значений в индексе,ключевых полях или связях,Измените данные в поле или полях. И вот в бд у меня код стоит счетчик .а после заполнения в программе она выдает ошибку но добавляет в базу .только не по порядку 1,2,3 а в последовательности 0,0,0
  • босмолокосос (31.05.17 12:41) [1]
    adc.CommandText:='insert into cities values('+quotedstr(peoples.p[i].city)+')';

    точнее insert нужно как то по другому прописать
  • sniknik © (31.05.17 13:49) [2]
    > Изменения не были успешно внесены из-за повторящихся значений в индексе,ключевых полях или связях,Измените данные в поле или полях.
    верь этому. в поле с уникальным индексом, как ни прописывай, а 2 одинаковых значения не внести (если это не null и индекс исключающий null, не помню поддерживает такой аккесс или нет). ищи что за поле/индекс мешает, и либо убери его, либо данные в него не дублируй.
 
Конференция "Базы" » Перенос бд с sql на акссес [D7]
Есть новые Нет новых   [118380   +18][b:0][p:0.003]