Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Немогу вставить запись в талицу, TQuery 
V
    Опции темы
Maiwend
  Дата 6.6.2006, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 1.4.2006

Репутация: нет
Всего: нет



Мне нужно программно вставить запись в табличку, ругается на то что поле АвтоИнкремент (первое поле). В таблице четыре поля, первое +АвтоИнк, запись надо добавить, внести 3 последних поля
Как это программно грамотно оформить?

Я пишу такой код
Код

Form2.Query2.Close;
Form2.Query2.SQL.Clear;
Form2.Query2.SQL.Add('INSERT INTO proc_volume VALUES ([B]01[/B],11,12,13)');
Form2.Query2.ExecSQL;


Что мне написать вместо 01 ?

Или например через параметры
Код

Form2.Query2.Close;
Form2.Query2.SQL.Clear;
Form2.Query2.SQL.Add('INSERT INTO proc_volume VALUES (:x1,:x2,:x3,:x4)');
Form2.Query2.ExecSQL;

:x1 -  какое значение надо подставлять?

Как правильно сделать добавление записи? Лучше через параметры. 
PM MAIL   Вверх
skyboy
Дата 6.6.2006, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 5
Всего: 260



Автоинкремент - на то и "авто", что сам добавится. Ничего туда писать не надо, да и невыйдет ничего, окромя сообщений об ошибках. В INSERT- конструкции, однако, придётся явно указать все поля, иначе будет пытаться писать всюду, включая автоинкрементое поле:
Код

Form2.Query2.SQL.Add('INSERT INTO proc_volume(field1,field2,field3) VALUES (11,12,13)');

К слову: внутри области отображения кода не работают теги жирного/подчёркнутого текста и прочие теги форматирования 
PM MAIL   Вверх
chief39
Дата 6.6.2006, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 8
Всего: 77



если первое - автоинкремент, тогда

для полей f1(автоинкрементное), f2, f3, f4 в таблице table1
будет так:

Insert into table1(t2, t3, t4)
values(23, 34, 65)

то есть явно перечисляй поля и в таком же порядке - значения для них.

Можно не перечислять и не вставлять ничего в автоинкрементное(само сгенерится) и в налл разрешающие поля(налл подставится по умолчанию) 


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
Maiwend
Дата 6.6.2006, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 1.4.2006

Репутация: нет
Всего: нет



Цитата(skyboy @ 6.6.2006,  15:41)
Автоинкремент - на то и "авто", что сам добавится. Ничего туда писать не надо, да и невыйдет ничего, окромя сообщений об ошибках. В INSERT- конструкции, однако, придётся явно указать все поля, иначе будет пытаться писать всюду, включая автоинкрементое поле:
Код

Form2.Query2.SQL.Add('INSERT INTO proc_volume(field1,field2,field3) VALUES (11,12,13)');

К слову: внутри области отображения кода не работают теги жирного/подчёркнутого текста и прочие теги форматирования

Вот именно этого знания и не хватало, про то что явно указывать поля.
Спасибо!


А то что жирным не выделяет уже сам заметил.

Добавлено @ 15:54 
chief39

Тоже спасибо! smile 
PM MAIL   Вверх
chief39
Дата 6.6.2006, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 8
Всего: 77



Ны успэл, да... 


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
Maiwend
Дата 7.6.2006, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 1.4.2006

Репутация: нет
Всего: нет



Цитата(chief39 @ 6.6.2006,  15:55)
Ны успэл, да...

Еще не все потеряно, у меня опять трабл.

Всем
Не знаю как правильно загнать значение в табличку. Код такой
Код

Form2.Query2.ParamByName('Vol').AsInteger:=StrToInt(TEdit(Form2.Components[i+1]).Text);


Тип поля в табличке Number
Тип значения, которое надо запихнуть Float
Естественно Дельфи ругается Type mismatch in expression

Пробовал писать так
Код

Form2.Query2.ParamByName('Vol').AsFloat:=StrToFloat(TEdit(Form2.Components[i+1]).Text);


Опять не хватает знаний  smile  
PM MAIL   Вверх
chief39
Дата 7.6.2006, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 8
Всего: 77



Цитата(Maiwend @  7.6.2006,  09:14 Найти цитируемый пост)
Тип поля в табличке Number
Тип значения, которое надо запихнуть Float
Естественно Дельфи ругается Type mismatch in expression

Делфи практически не помню, но мне кажется, что логично ругается...

Цитата(Maiwend @  7.6.2006,  09:14 Найти цитируемый пост)
Пробовал писать так

И что в этом случае произошло?

Кстати, приведи типы ВСЕХ полей таблицы и кусень кода, где задаёшь ВСЕ параметры и скажи где ИМЕННО вылетает

А что за СУБД и какой формат NUMBER? Он может быть number(19,9) (с дробной частью) или, к примеру number(19) без оной.

Если ты флоат пытаешься впихнуть в целое. Не помню, будет ли так.
Попробуй во втором варианте полученный флоат округлить и преобразовать в инт перед запихиванием asInteger.


Цитата(Maiwend @  7.6.2006,  09:14 Найти цитируемый пост)
Тип значения, которое надо запихнуть Float

Да... приведи всё-таки ddl таблицы


Зы: тему лучше бы в делфи перетащить(если кто из модераторов заглянет)
 


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
Maiwend
Дата 7.6.2006, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 1.4.2006

Репутация: нет
Всего: нет



Цитата(chief39 @  7.6.2006,  11:54 Найти цитируемый пост)
Делфи практически не помню, но мне кажется, что логично ругается...

Это да, я нашел описание данной ошибки, но там кода небыло.

Цитата(chief39 @  7.6.2006,  11:54 Найти цитируемый пост)
И что в этом случае произошло?

Тоже самое.

Цитата(chief39 @  7.6.2006,  11:54 Найти цитируемый пост)
Кстати, приведи типы ВСЕХ полей таблицы и кусень кода, где задаёшь ВСЕ параметры и скажи где ИМЕННО вылетает

Табличка в которую записываю Paradox7
F1 - +AutoIncrement
F2 - Number
F3 - Number
F4 - Number

Код

Begin
Form2.Query2.Close;
Form2.Query2.SQL.Clear;
Form2.Query2.SQL.Add('INSERT INTO proc_volume(TechprocN,ProcN,Volume) VALUES (:ID_T,:ID_P,:Vol)');
Form2.Query2.ParamByName('ID_T').AsInteger:=Query1.fieldByName('ID').asInteger;
//------------------------
Form3.DBEdit1.DataField:='';
Form3.DBEdit2.DataField:='';
Form3.DBEdit3.DataField:='';
Form3.Query1.Close;
Form3.Query1.SQL.Clear;
Form3.Query1.SQL.Add('SELECT ID FROM process WHERE Process = :SetValue');
Form3.Query1.ParamByName('SetValue').AsString:=TEdit(Form2.Components[i]).Text;
Form3.Query1.Open;
//---------------------------
Form2.Query2.ParamByName('ID_P').AsInteger:=Form3.Query1.fieldByName('ID').asInteger;
Form2.Query2.ParamByName('Vol').AsFloat:=StrToFloat(TEdit(Form2.Components[i+1]).Text);
Form2.Query2.ExecSQL;
end

Вот кусок. Все работает, все данные идут в параметры, все четко, как запускает запрос начинает ругаться (Form2.Query2.ExecSQL;)

Цитата(chief39 @  7.6.2006,  11:54 Найти цитируемый пост)
А что за СУБД и какой формат NUMBER? Он может быть number(19,9) (с дробной частью) или, к примеру number(19) без оной.

В данном случае я базу сделал из отдельных таблиц Paradox7. Number с дробной частью.

Цитата(chief39 @  7.6.2006,  11:54 Найти цитируемый пост)
Попробуй во втором варианте полученный флоат округлить и преобразовать в инт перед запихиванием asInteger.

Попробую отпишусь ниже.

Вот еще я писал если там есть, что полезное:
http://forum.vingrad.ru/index.php?showtopic=97532
 
PM MAIL   Вверх
Maiwend
Дата 7.6.2006, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 1.4.2006

Репутация: нет
Всего: нет



Код

Form2.Query2.ParamByName('Vol').AsInteger:=Trunc(StrToFloat(TEdit(Form2.Components[i+1]).Text));
 

Так выпригивает таже ошибка. 

Это сообщение отредактировал(а) Maiwend - 7.6.2006, 14:06
PM MAIL   Вверх
chief39
Дата 7.6.2006, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 8
Всего: 77



Цитата(Maiwend @  7.6.2006,  13:31 Найти цитируемый пост)
Form2.Query2.ParamByName('ID_P').AsInteger:=Form3.Query1.fieldByName('ID').asInteger;
Form2.Query2.ParamByName('Vol').AsFloat:=StrToFloat(TEdit(Form2.Components[i+1]).Text);

Нуу... у тебя два одинаковых по типу параметра задаются по разному(типы гляди)
Не в этом ли соль?

Добавлено @ 14:15 
трунк - это в делфях не для трункации строк? преобразование флоата к инту так проводится?

ЗЫ: но это направление отпадает - если тебе в базе нужен флоат, то интежер вставлять не надо тогда... надо с флоатом бороться 


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
Maiwend
Дата 7.6.2006, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 1.4.2006

Репутация: нет
Всего: нет



Цитата(chief39 @  7.6.2006,  14:13 Найти цитируемый пост)
Нуу... у тебя два одинаковых по типу параметра задаются по разному(типы гляди)
Не в этом ли соль?

Именно в типах и проблема, только я не знаю еще пока как решить, буду искать.
Два одинаковых параметра это конечно, у меня и типы в таблице одинаковые только, Объем нужен с дробью.

Кстати я же пробовал, переменную типа Integer записывать тоже не получается ведь.

А без параметров все четко, цифры пишутся.
Похоже дело в присвоении параметров.

Кароче пока я писал нашел ошибку, в эти Number нужно Float кидать все.  smile 

 smile 
 
PM MAIL   Вверх
chief39
Дата 7.6.2006, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 8
Всего: 77



Цитата(Maiwend @  7.6.2006,  14:34 Найти цитируемый пост)
в эти Number нужно Float кидать все.


Ну да

Цитата(chief39 @  7.6.2006,  14:13 Найти цитируемый пост)
Нуу... у тебя два одинаковых по типу параметра задаются по разному(типы гляди)
Не в этом ли соль?


Я так понимал что это кусок кода с  единственным интежером среди остальных флоатов - это промежуточно-тестовый вариант был, а со всеми флоатами у тебя тоже летело  smile


 


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
Maiwend
Дата 7.6.2006, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 1.4.2006

Репутация: нет
Всего: нет



Цитата(chief39 @  7.6.2006,  15:03 Найти цитируемый пост)
Я так понимал что это кусок кода с  единственным интежером среди остальных флоатов - это промежуточно-тестовый вариант был, а со всеми флоатами у тебя тоже летело 

В общем моя ошибка была в том, что я пытался записывать в таблицу значение integer, а на самом деле нужно было float

Я исправил в коде integer на float и все заработало.

Спасибо за помощь, я пока отвечал на твои вопросы пробовал варианты, в результате как бы натолкнулся на решение smile 
PM MAIL   Вверх
Mephisto
Дата 15.6.2006, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

Репутация: нет
Всего: 34



Цитата(Maiwend @  7.6.2006,  15:45 Найти цитируемый пост)
Спасибо за помощь, я пока отвечал на твои вопросы пробовал варианты, в результате как бы натолкнулся на решение

Так, кстати, всегда. Правильно поставелнный вопрос содержит в себе ответ.  smile  
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0945 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.