Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2017, 15:36   #11
Дэдпул
Пользователь
 
Регистрация: 28.04.2016
Сообщений: 34
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
посмотрел.

во-первых, Вы забыли сказать, что вход по логину/паролю 1/1

во-вторых, Вам же сказали, как решать проблему - нужно просто указать все поля в INSERT

вот, так, например:
Код:
 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;
   if ads.RecordCount>0 then begin
      adc.CommandText:='insert into res_givers (rgorg, rgfname, rgnoname) values('+
          ads.FieldByName('oid').AsString+', '+quotedstr(rgfname.Text)+', '+quotedstr(rgnoname.Text)+')';
      adc.Execute
   end
   else begin
      ShowMessage('Ошибка. В БД нет организации (суда)  '+orgname.Text);
      Exit
   end;
  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;
   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;
в место этого?
Дэдпул вне форума Ответить с цитированием
Старый 31.05.2017, 15:40   #12
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Сообщение от Дэдпул Посмотреть сообщение
Не понял
Поля, по которым таблицы связываются.

Предположим, у Вас две таблицы с полями:

Table1(ID, data)
Table2(ID, Table1_ID, data)

Связь таблицы 2 с таблицей 1 производится указанием значения Table1.ID в поле Table2.Table1_ID.

Далее представьте записи:
Table1 (255, 'Данные');
Table2 (133, 255, 'Данные');

При переносе в Акцесс значение первичного ключа Id в таблицах изменится на счётчик и получится:

Table1 (1, 'Данные');
Table2 (1, 255, 'Данные');

При этом поле Table2.Table1_ID будет иметь прежнее значение (255) вместо нового (1). Соответственно, в лучшем случае связи нарушатся, в худшем - будет кидать исключения, что объект с кодом 255 не найден в БД
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 31.05.2017 в 15:42.
Sciv вне форума Ответить с цитированием
Старый 31.05.2017, 15:56   #13
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Дэдпул Посмотреть сообщение
а куда его?
попробуйте найти в вашем коде место, где есть код вставки "insert into res_givers"

т.е. берём ваш код:

Цитата:
Код:
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;
и то, что зачёркнуто, заменяем на
Код:
 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;
   if ads.RecordCount>0 then begin
      adc.CommandText:='insert into res_givers (rgorg, rgfname, rgnoname) values('+
          ads.FieldByName('oid').AsString+', '+quotedstr(rgfname.Text)+', '+quotedstr(rgnoname.Text)+')';
      adc.Execute
   end
   else begin
      ShowMessage('Ошибка. В БД нет организации (суда)  '+orgname.Text);
      Exit
   end;
  end;
разумеется, этого будет недостаточно.
нужно найти все места в коде, где написан INSERT INTO <ИмяТаблицы> VALUES (....

и заменить на:
INSERT INTO <ИмяТаблицы> (Поле1, Поле2, .... , ПолеN) VALUES (.....


p.s. а что, данную программу не Вы писали?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 31.05.2017, 16:00   #14
Дэдпул
Пользователь
 
Регистрация: 28.04.2016
Сообщений: 34
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
а что, данную программу не Вы писали?
препод дал.сказал переписать на акссес
Дэдпул вне форума Ответить с цитированием
Старый 31.05.2017, 16:06   #15
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

А, это рабочее место пристава, припоминаю
Цитата:
Боюсь меня на защите засмеёт Комиссия
Цитата:
препод дал.сказал переписать на акссес
преподу план нужен по защите дипломных работ ))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 31.05.2017, 16:20   #16
Дэдпул
Пользователь
 
Регистрация: 28.04.2016
Сообщений: 34
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
А, это рабочее место пристава, припоминаю
преподу план нужен по защите дипломных работ ))
Ну там долгая история.
Дэдпул вне форума Ответить с цитированием
Старый 31.05.2017, 16:23   #17
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Дэдпул Посмотреть сообщение
Ну там долгая история.
так мы никуда не торопимся. Настало время для долгих историй!
рассказывайте...

код вставили?
идею, что и как менять поняли?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 31.05.2017, 16:23   #18
Дэдпул
Пользователь
 
Регистрация: 28.04.2016
Сообщений: 34
По умолчанию

Код:
ads.Active:=false;
   ads.CommandText:='select * from organs where organs.oname='+quotedstr(orgname.Text);
   ads.Active:=true;
   if ads.RecordCount>0 then begin
      adc.CommandText:='insert into res_givers (rgorg, rgfname, rgnoname) values('+
          ads.FieldByName('oid').AsString+', '+quotedstr(rgfname.Text)+', '+quotedstr(rgnoname.Text)+')';
      adc.Execute
   end
   else begin
      ShowMessage('Ошибка. В БД нет организации (суда)  '+orgname.Text);
      Exit
   end;
  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 (rrgid,rart,rregnum,rregdate,rdate,rtodate,rtotime,rprice) 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 (cname) 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 (pfname,pnname,poname,pwasborn,pcid,padr) 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 (sname) 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 (wwrid,wwpid,wwsid) 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.
все верно ?
Дэдпул вне форума Ответить с цитированием
Старый 31.05.2017, 16:25   #19
Дэдпул
Пользователь
 
Регистрация: 28.04.2016
Сообщений: 34
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
так мы никуда не торопимся.
Дело в том что я уже как год назад закончил учебу.Защищался с бд sql .Мне стало интересно .можно как нибудь базу перекинуть на акссес
Дэдпул вне форума Ответить с цитированием
Старый 31.05.2017, 16:32   #20
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Код:
adc.CommandText:='insert into resolution (rrgid,rart,rregnum,rregdate,rdate,rtodate,rtotime,rprice) values(0, ' + quotedstr(ads.Recordset.Fields[0].get_value())+',...
А rrgid по идее внешний ключ, таблица res_givers. У неё ключ тоже счетчик. А почему в resolution внешнему ключу ноль присвавается?
Цитата:
Мне стало интересно .можно как нибудь базу перекинуть на акссес
Можно, если там триггеров и прочих сложностей не было. А вообще процесс переноса очень интимная задачка, нужно очень аккуратненько с внешними ссылками разобраться. Возможно какие-то промежуточные таблицы делать и прочая муть
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 31.05.2017 в 16:37.
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перенос базы данных на sql server ce ts-alan C/C++ Базы данных 1 27.03.2014 20:50
Перенос базы данных. (Microsoft SQL Server 2005) Gleg БД в Delphi 8 15.01.2013 21:29
Преобразование базы данных Access в формат SQL Server Alar Microsoft Office Access 5 18.04.2010 01:46
перенос данных из Access в MS SQL Server2000 ГОСЕАН БД в Delphi 5 28.12.2007 12:31