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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.06.2012, 12:13   #1
irina1410
Новичок
Джуниор
 
Регистрация: 25.06.2012
Сообщений: 9
Восклицание При добавлении записи в БД пишем ошибку "поле не найдено"

Здравствуйте.
Вот проблема какая: написала прогу с использованием sql.
При процедуре добавления записи в БД пишет ошибку "ADOQuery1: Field "name" not found". Process stopped.
В БД это поле текстового типа, остальные численные.
Код:
procedure TInsert.saveClick(Sender: TObject);
var iditem,code: integer;
    sql1,mem,mem1: string;
    price,kol: real;
begin
s:=new_name.Text;
if (new_id.Text='') or (s='') then
                            begin
                            ShowMessage('Код товара (Наименование) не могут быть пустыми!');
                            exit;
                            end;
val(new_id.Text,iditem,code);
if (code<>0) or (iditem<0) then
                        begin
                        ShowMessage('Неправильно указан код товара!');
                        exit;
                        end;
Main.ADOQuery1.Close;
SQL1:=Main.AdoQuery1.SQL.Text;
Main.AdoQuery1.SQL.Clear;
SQL:='select id from my where id='+new_id.Text;
Main.ADOQuery1.SQL.Add(sql);
Main.ADOQuery1.Open;
if Main.ADOQuery1.RecordCount<>0 then
                                begin
                                ShowMessage('Такой код товара уже существует!');
                                Main.ADOQuery1.Close;
                                Main.ADOQuery1.SQL.Clear;
                                Main.ADOQuery1.SQL.Add(sql1);
                                Main.ADOQuery1.Open;
                                exit;
                                end
else begin Main.ADOQuery1.Open;
           Main.ADOQuery1.SQL.Clear;
           Main.ADOQuery1.Sql.Add(sql1);
      end;
val(new_kol.Text,kol,code);
if (code<>0) or (kol<0) then begin
                          ShowMessage('В поле Объем партии введено некор. значение данные не будут сохранены!');
                          mem:='0';
                          end
                        else mem:=new_kol.Text;
val(new_pr.Text,price,code);
if (code<>0) or (price<0) then
                          begin
                          ShowMessage('В поле Стоимость введено некорректное значение данные не будут сохранены!');
                          mem1:='0';
                          end
                          else mem1:=new_pr.Text;
SQL:='INSERT INTO my (id, name, kol, pr) VALUES ('+new_id.Text+', '+new_name.Text+', '+new_kol.Text+', '+new_pr.Text+' )';
Main.ADOQuery1.SQL.Add(SQL);
Main.ADOQuery1.Open;
Insert.Hide;{скрыли форму добавления записи}
Main.Show;{открыли основную форму}
end;{/procedure TInsert.saveClick}
new_id, new_name, new_kol, new_pr - это имена ячеек на форме "Insert", для ввода новых значений.

Также в программе есть сортировка в полем "name" и ьам прога поле видит и всё работает.

Подскажите, что делать, в чем проблема. Завтра экзамен, а я всё разобраться не могу.
Помогите, пожалуйста.irina1410@list.ru
Если нужен исходник, могу прислать на почту.

Последний раз редактировалось Stilet; 25.06.2012 в 12:27.
irina1410 вне форума Ответить с цитированием
Старый 25.06.2012, 12:23   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Первым бы делом попробовал так
Код:
INSERT INTO my (id,[name], kol, pr) VALUES ...
Возможно СУБД не нравится имя поля name. А код не смотрел, поскольку не читабельный
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 25.06.2012, 12:48   #3
irina1410
Новичок
Джуниор
 
Регистрация: 25.06.2012
Сообщений: 9
По умолчанию

Попробовала.
Та же ошибка.
irina1410 вне форума Ответить с цитированием
Старый 25.06.2012, 12:51   #4
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

попробуй переименовать поле NAME на какое-то другое, напр. TOVAR_NAME ... скорее всего это имя зарезервировано
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 25.06.2012, 13:05   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Если Name символьного типа, то и значение помещаемое в него в списке Values должно быть в кавычках. СУБД на подобного рода ошибки может выдать сообщение вообще другого смысла
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 25.06.2012, 13:39   #6
irina1410
Новичок
Джуниор
 
Регистрация: 25.06.2012
Сообщений: 9
По умолчанию

Переименовала, в проге изменила. В итоге выскакивает другая ошибка "Ошибка синтаксиса в предложении FROM". Я уже несколько раз просмотрела, там всё нормально.

У меня так изначально и было сделано. Выскакивала ошибка про "name". Я просто уже много всякого попробовала сделать.

Последний раз редактировалось Stilet; 25.06.2012 в 15:55.
irina1410 вне форума Ответить с цитированием
Старый 25.06.2012, 13:48   #7
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

Цитата:
Сообщение от irina1410 Посмотреть сообщение
Переименовала, в проге изменила. В итоге выскакивает другая ошибка "Ошибка синтаксиса в предложении FROM". Я уже несколько раз просмотрела, там всё нормально.
показывай текст запроса и ошибки
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 25.06.2012, 14:05   #8
irina1410
Новичок
Джуниор
 
Регистрация: 25.06.2012
Сообщений: 9
По умолчанию

А можно вам на почту отправить?
Чё-то я не понимаю как картинки здесь послать...
И еще, честно говоря не понимаю где именно ошибка возникает. Я просмотрела все запросы с From.
irina1410 вне форума Ответить с цитированием
Старый 25.06.2012, 14:08   #9
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

о какой картинке речь? я прошу текст запроса на котором ошибка вылетает и текст самой ошибки
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 25.06.2012, 14:23   #10
irina1410
Новичок
Джуниор
 
Регистрация: 25.06.2012
Сообщений: 9
По умолчанию

А.
Сейчас.

Ошибка. Progect.exe raised exception class EOleException with message "Ошибка синтаксиса в предложении FROM". Process stopped. Use Step or Run to continue.

Код программы Добавления.
Код:
procedure TInsert.saveClick(Sender: TObject);
var iditem,code: integer;
    sql1,mem,mem1: string;
    price,kol: real;
begin
s:=new_name.Text;
if (new_id.Text='') or (s='') then
                            begin
                            ShowMessage('Код товара (Наименование) не могут быть пустыми!');
                            exit;
                            end;
val(new_id.Text,iditem,code);
if (code<>0) or (iditem<0) then
                        begin
                        ShowMessage('Неправильно указан код товара!');
                        exit;
                        end;
Main.ADOQuery1.Close;
SQL1:=Main.AdoQuery1.SQL.Text;
Main.AdoQuery1.SQL.Clear;
SQL:='select id from my where id='+new_id.Text;
Main.ADOQuery1.SQL.Add(sql);
Main.ADOQuery1.Open;
if Main.ADOQuery1.RecordCount<>0 then
                                begin
                                ShowMessage('Такой код товара уже существует!');
                                Main.ADOQuery1.Close;
                                Main.ADOQuery1.SQL.Clear;
                                Main.ADOQuery1.SQL.Add(sql1);
                                Main.ADOQuery1.Open;
                                exit;
                                end
else begin Main.ADOQuery1.Open;
           Main.ADOQuery1.SQL.Clear;
           Main.ADOQuery1.Sql.Add(sql1);
      end;
val(new_kol.Text,kol,code);
if (code<>0) or (kol<0) then begin
                          ShowMessage('В поле Объем партии введено некор. значение данные не будут сохранены!');
                          mem:='0';
                          end
                        else mem:=new_kol.Text;
val(new_pr.Text,price,code);
if (code<>0) or (price<0) then
                          begin
                          ShowMessage('В поле Стоимость введено некорректное значение данные не будут сохранены!');
                          mem1:='0';
                          end
                          else mem1:=new_pr.Text;
SQL:='INSERT INTO my (id, tname, kol, pr) VALUES ('+new_id.Text+', '+new_name.Text+', '+new_kol.Text+', '+new_pr.Text+' )';
Main.ADOQuery1.SQL.Add(SQL);
Main.ADOQuery1.Open;
Insert.Hide;{скрыли форму добавления записи}
Main.Show;{открыли основную форму}
end;{/procedure TInsert.saveClick}
Код:
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Main},
  Unit2 in 'Unit2.pas' {Insert};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TMain, Main);
  Application.CreateForm(TInsert, Insert);
  Application.Run;
end. вот это подсвечивает синим.
Процедуры из ОСНОВНОЙ ПРОГРАММЫ
Код:
procedure TMain.OkClick(Sender: TObject);
VAR sql,sql1,s,rname,a,b: string;
    k,p,new_kol,new_pr,rid,rkol,rpr,aa,bb: real;
    iditem, kod, n_id, kod1, nomer,nid: integer;
begin {procedure TForm1.OkClick}
 case rgr.ItemIndex of
 0: begin{сортировка}  {+}  
    {тут с name всё работает}
     end; {/сортировка}
 1: begin{фильтр}  {+}
      {тут всё работает}
     end; {/фильтр}
 2: begin{добавление}
         {выбираем все поля}
    ADOQuery1.Close;
    s:=ADOQuery1.SQL.Text;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add('select * from my');
    ADOQuery1.Open;
    {очищаем области для ввода данных на простой форме}
    with Insert do
      begin
        new_id.Text:='';
        new_name.Text:='';
        new_kol.Text:='';
        new_pr.Text:='';
       end;
   Main.Hide; {скрываем табличную форму}
   Insert.Show; {отображаем простую форму для ввода}
    end; {/добавление}
 end; {/case}
end; {/procedure TForm1.OkClick}

procedure TMain.daClick(Sender: TObject);
VAR sql,sql1,s,rname: string;
    k,p,new_kol,new_pr,rid,rkol,rpr: real;
    iditem, kod, n_id, kod1, nomer: integer;
begin
      {ADOQuery1.Close; {закрыли}
      {ADOQuery1.SQL.Clear; {очистили прошлый запрос}
      {red_id.Visible:=true;
      red_name.Visible:=true;
      red_kol.Visible:=true;
      red_pr.Visible:=true;
      da.Visible:=true;
      net.Visible:=true;
      val(red_id.Text,rid,kod);
      if (rid=ADOQuery1id.Value) or (kod<>0) then exit;
      if red_name.Text='' then rname:='имя не заполнено';
      val(red_kol.Text,rkol,kod);
      if (rkol=ADOQuery1kol.Value) or (kod<>0) then exit;
      sql:='UPDATE my SET id=red_id, name=red_name, kol=red_kol, pr=red_pr)';
      ADOQuery1.SQL.Add(sql); {добавили новый запрос}
      {ADOQuery1.Open; }
end;

end.

Последний раз редактировалось Stilet; 25.06.2012 в 15:58.
irina1410 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
при добавлении записи в таблицу выдает ошибку brutalis БД в Delphi 28 13.05.2012 17:49
при вставке записи в БД (MDB) выдает ошибку "неправильный синтаксис запроса" lkjuio C# (си шарп) 8 01.05.2011 23:30
Нужно поле "Загрузить файл" в "новости сайта" planetary Помощь студентам 1 24.06.2010 12:26
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
Excel файл открывается не "до конца" (странички "не показываются" только серое поле) Dorvir Microsoft Office Excel 2 28.03.2008 10:03