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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2010, 22:30   #1
Galiska
 
Регистрация: 19.05.2010
Сообщений: 3
Печаль Добавление записи в таблицу

для добавления записи пишу такой код:

Код:
with TADOQuery.create(self) do
    begin
      SQL.Clear;
      SQL.Add(' INSERT INTO Успеваемость (КУспеваемоти, КГуппы, КСтудента, КУчебногоГода, КСеместра, КДисциплины, КЛектора, КФормы, ' + 
' Оценка после сессии, Оценка после пересдачи, Баллы после сессии, Баллы после пересдачи, ECTS после сессии, ECTS после пересдачи) ' +
      ' VALUES (null, :group, :fio, :god, :semestr, :discip,:Lek,:forma, :ops, :opp, :ballis, :ballip, :bps, :bpp)');
      Parameters.ParamByName('fio').Value:=ComboBox1.text;
      Parameters.ParamByName('ops').Value:=OS;
      Parameters.ParamByName('bps').Value:=BS;
      Parameters.ParamByName('opp').Value:=OP;
      Parameters.ParamByName('bpp').Value:=BP;
      Parameters.ParamByName('ballis').Value:=Edit3.Text;
      Parameters.ParamByName('ballip').Value:=Edit4.Text;
      Parameters.ParamByName('group').Value:=Form_Yspev.ComboBox4.Text;
      Parameters.ParamByName('god').Value:=Form_Yspev.ComboBox5.Text;
    Parameters.ParamByName('semestr').Value:=Form_Yspev.ComboBox6.Text;
      Parameters.ParamByName('Lek').Value:=Form_Yspev.ComboBox7.Text;
      Parameters.ParamByName('discip').Value:=Form_Yspev.ComboBox8.Text;
      Parameters.ParamByName('forma').Value:=Form_Yspev.ComboBox9.Text;
      ExecSQL;
      ComboBox1.Text:='';
      Edit3.Text:='';
      Edit4.Text:='';
      ShowMessage('Запись добавлена!');
    end;
При выполнении данного запроса программа вылетает с ошибкой: Project Project1.exe raised exception class EDatabaseError with message 'Parameter 'fio' not found'
Возможно эта ошибка из-за того, что тип полей (КСтудента, КГруппы и т.д.) в Access прописан как числовой, а я пытаюсь присвоить строку. Писала немного иначе, присваивала именно код, но тогда вылетает с ошибкой, что-то вроде ошибка при чтении с адреса... Подскажите пожалуйста как исправить, я с самого утра над этим сижу, весь ваш форум перекопала(( Заранее спасибо.
Galiska вне форума Ответить с цитированием
Старый 24.05.2010, 04:44   #2
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Не знаю, имеет ли это в принципе значение, но все же желательно задавать параметры в таком же порядке, в каком происходит вставка в поля. Я имею ввиду вот так:
Код:
with TADOQuery.create(self) do
    begin
      SQL.Clear;
      SQL.Add(' INSERT INTO Успеваемость (КУспеваемоти, КГуппы, КСтудента, КУчебногоГода, КСеместра, КДисциплины, КЛектора, КФормы, ' + 
' Оценка после сессии, Оценка после пересдачи, Баллы после сессии, Баллы после пересдачи, ECTS после сессии, ECTS после пересдачи) ' +
      ' VALUES (null, :group, :fio, :god, :semestr, :discip,:Lek,:forma, :ops, :opp, :ballis, :ballip, :bps, :bpp)');
      Parameters.ParamByName('group').Value:=Form_Yspev.ComboBox4.Text;
      Parameters.ParamByName('fio').Value:=ComboBox1.text;
      Parameters.ParamByName('god').Value:=Form_Yspev.ComboBox5.Text;
      Parameters.ParamByName('semestr').Value:=Form_Yspev.ComboBox6.Text;
      Parameters.ParamByName('discip').Value:=Form_Yspev.ComboBox8.Text;
      Parameters.ParamByName('Lek').Value:=Form_Yspev.ComboBox7.Text;
      Parameters.ParamByName('forma').Value:=Form_Yspev.ComboBox9.Text;
      Parameters.ParamByName('ops').Value:=OS;
      Parameters.ParamByName('opp').Value:=OP;
      Parameters.ParamByName('ballis').Value:=Edit3.Text;
      Parameters.ParamByName('ballip').Value:=Edit4.Text;
      Parameters.ParamByName('bps').Value:=BS;
      Parameters.ParamByName('bpp').Value:=BP;
      ExecSQL;
      ComboBox1.Text:='';
      Edit3.Text:='';
      Edit4.Text:='';
      ShowMessage('Запись добавлена!');
    end;
Так легче видеть что куда вставляется

Далее...
Цитата:
Возможно эта ошибка из-за того, что тип полей (КСтудента, КГруппы и т.д.) в Access прописан как числовой, а я пытаюсь присвоить строку.
Если так, то используйте функцию StrToInt. Например,
Код:
     Parameters.ParamByName('group').Value:=StrToInt(Form_Yspev.ComboBox4.Text);
      Parameters.ParamByName('fio').Value:=StrToInt(ComboBox1.text);
Пробуйте и рассказывайте: получилось или нет. Поможем
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 25.05.2010, 00:47   #3
Galiska
 
Регистрация: 19.05.2010
Сообщений: 3
По умолчанию

Попробовала первый вариант, т.е. написать по порядку, вот так:
Код:
      Parameters.ParamByName('group').Value:=Form_Yspev.ComboBox4.Text;
      Parameters.ParamByName('fio').Value:=ComboBox1.text;
      Parameters.ParamByName('god').Value:=Form_Yspev.ComboBox5.Text;
и т.д.
Теперь оно ругается на параметр group...
А второй вариант: StrToInt. Мне он не подойдёт, т.к. я добавляю в таблицу в которой поля (КУспеваемоти, КГуппы, КСтудента, КУчебногоГода, КСеместра и т.д.) являются вторичными ключами, т.е. у них тип в любом случае числовой. А данные я ввожу строки, такие как (группа: ПО-06в или ПО-06а, ФИО: Степанов В. А. и т.д.), поэтому эти строки ни как не преобразуются в integer((.
Есть такой вариант на каждый параметр писать ещё один sql-запрос, который из первичных таблиц будет выбирать по введённой строке id(первичный ключ), а затем в приведённый мной запрос передавать уже выбранный id. Я это пыталась сделать, но оно вылетает с ошибкой (что-то вроде чтение по адресу...). Проверила свой запрос на выбор id, а он почему-то не присваивает id параметру, а следовательно и передавать нечего, скорее всего из-за этого и ошибка при чтении по адресу((.
Помогите, что мне с этим сделать((
Может я ошибаюсь с выбором id, может это можно по другому решить((
Galiska вне форума Ответить с цитированием
Старый 25.05.2010, 08:07   #4
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Если Вы вставляете в поля нечислового типа, то не используйте StrToInt. В противном случае иначе.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление записи в таблицу folga БД в Delphi 4 21.04.2010 08:15
ADOQuery, добавление в таблицу. Explosion Помощь студентам 5 18.03.2010 12:06
ADO.NET: VS 2005 C# + Sql server express: добавление записи в таблицу kostyan23 Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 1 02.03.2010 14:04
Добавление записи в таблицу (ADO) Yura_S БД в Delphi 12 25.11.2009 19:11
Добавление записи через список в связанную таблицу(при связи с Access) megaten БД в Delphi 5 17.05.2009 15:57