Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Добавление записей в несколько связанных таблиц


Автор: Neighbour 1.4.2009, 23:06
Добренького всем времени суток.

Пишу по работе приблуду, чтоб  кадастровые данные по участкам в населенном пункте хранились в одной базе.
А то разбросано все - координаты в одном файле, данные о владельце - в другом и т.д.
В общем, все получалось до определенного момента. Вручную загнанные в Access данные нормально отображаются,
Просмотреть, поискать можно. Вот проблемка возникла при попытке пополнить БД из приложения. Функция "Импорт обменного файла". Обменный файл - это структурированный текстовый файл специальный со всей кадастровой информацией и я хотел функцию добавления информации из обменного файла в БД сделать. Ошибки выдает. Я в БД вообще не силен. Равно как и в программировании вообще. smile Инфу в переменные из обменника считывает, а в базу добавлять не хочет - ругается. 

Помогите, пожалуйста разобраться. Прилагаю исходник, базу и обменный файл для проверки. Только не смейтесь очень над кривостью кода, мне на данном этапе главное чтоб работало.


Автор: Neighbour 2.4.2009, 19:27
Может можно каким-либо образом напрямую в БД добавлять данные, не через ADOTable Append'ом?

Автор: Kbl4AH 3.4.2009, 07:16
Цитата(Neighbour @  2.4.2009,  20:27 Найти цитируемый пост)
Может можно каким-либо образом напрямую в БД добавлять данные, не через ADOTable Append'ом?

запросом 
Код

insert into table ...

Автор: Neighbour 4.4.2009, 00:02
Я уже понял, что не получалось добавить, потому чтов другом месте программы юзался adotable.Создал еще по одному для каждой таблицы. Но при попытке добавить выдает "Несоответствие типов данных в выражении условия отбора". Что за штука?

Вырубает в этом месте, т.е при самой первой попытке добавить запись:

Код


          GeomForAdd.Post;
       



Процедура полностью:

Код


procedure TForm1.Button3Click(Sender: TObject);
var
i: integer;
begin
try
    UchForAdd.Open;
    GeomForAdd.Open;
    FizForAdd.Open;
    for i:=0 to quantity do
        begin
          GeomForAdd.Append;
          GeomForAdd['CadastrNomer']:=CadNum;
          GeomForAdd['NomerTochki']:=Coordinates[i,0];
          GeomForAdd['X']:=Coordinates[i,1];
          GeomForAdd['Y']:=Coordinates[i,2];
          GeomForAdd.Post;
        end;
    Uch.Append;
      UchForAdd['INNVladeltsa']:=StrToInt(Inn);
      UchForAdd['CadastrNomer']:=StrToInt(CadNum);
      UchForAdd['KodUKCVZ']:=CelIsp;
      UchForAdd['GASeria']:=GASer;
      UchForAdd['GANomer']:=StrToInt(GANum);
      UchForAdd['DenejnayaOcenka']:=StrToFloat(DenOc);
      UchForAdd['AdrUlitsa']:=AdrUl;
      UchForAdd['AdrNomDoma']:=StrToInt(AdrDom);
      UchForAdd['AdrNomKvartiry']:=StrToInt(AdrKvar);
      UchForAdd['AdrKorpus']:=AdrCorp;
      UchForAdd['Ploshad']:=StrToFloat(Plosh);
    FizForAdd.Append;
      FizForAdd['INN']:=StrToInt(Inn);
      FizForAdd['Familia']:=Fam;
      FizForAdd['Imia']:=Im;
      FizForAdd['Otchestvo']:=Otch;
      FizForAdd['PasportSeria']:=PassSer;
      FizForAdd['PasportNomer']:=PassNum;
    UchForAdd.Post;
    FizForAdd.Post;
except
  on E: Exception do ShowMessage(E.Message);
end;
end;


Автор: GraNit 19.8.2009, 13:56
Присоединюсь к вопросу, т.е. та же проблема. Только ошибка другая.
При попытке записать данные в базу через ADOTable1.Post тсранно ругается, а именно: '[Microsoft][Драйвер ODBC Paradox] В операции должен использоваться обновляемый запрос'. Это он меня на SQL отправляет?

Автор: defmzk 20.8.2009, 03:48
а если использовать adoquery ?

Автор: GraNit 20.8.2009, 05:49
Разобрался!
Пришлось погуглить. Но вот здесь: http://forum.sources.ru/index.php?showtopic=264456 все сказано.
Для ленивых могу сказать, почему-то требуется обязательно ключевое поле.
Добавил в свою базу (paradox) поле ID аутоинкрементальное и все заработало. Записи стали нормально добавляться.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)