Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.08.2013, 18:57
malkhazi malkhazi вне форума
Прохожий
 
Регистрация: 28.08.2013
Сообщения: 4
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию insert into BDE

Запрос выполняется с ошибками - добавляется пустая строка вот запрос

======================================

insert into trans_rasxod
(tr_id_prod, tr_id_categ, tr_sk, tr_ves, tr_price, tr_ves_p, tr_date, tr_time, tr_user, tr_oper)

Values(
1, (select p_id_categ from product where p_id = 1), 1, 'кг', 250, 'Руб', '07.07.2013', '06:05:00 PM', 1, 0
)

Кто нибудь знает в чем проблема?
Ответить с цитированием
  #2  
Старый 28.08.2013, 19:43
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Синтаксически вроде без ошибок, но вот смущают 2 момента:
1. Использование вложенного запроса. Попробуйте для начала задать тестовое значение вместо вложенного запроса.
2. Запись даты и времени, как строки. У вас поля tr_date, tr_time точно текстовые?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 28.08.2013, 20:13
malkhazi malkhazi вне форума
Прохожий
 
Регистрация: 28.08.2013
Сообщения: 4
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Если убрать вложенного запроса то запрос работает нормально.
Поля Tr_Date тип date и Tr_Time тип Time.

Если убрать вложенный запрос, то запрос работает нормально. Сам вложенный запрос отдельно работает. Если заменить вложенный запрос числом запрос работает.
Если выполнить запрос используя NULL запрос выполняется только 'tr_id_categ' пустой, остальные заполняется.
Новый пустой запись добавляется вместе Primary Key а у Filad-а тип AutoIncreament.
В таблице Foreign Key пока не задан.

Думаю Select внутри Values Недопустим.

Последний раз редактировалось M.A.D.M.A.N., 29.08.2013 в 12:27.
Ответить с цитированием
  #4  
Старый 29.08.2013, 18:03
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Ну я так и думал. Можно изменить запрос немножко. Вместо Values использовать еще один подзапрос собирающий все значения. Т.е. получится примерно так:
Код:
insert into trans_rasxod 
(tr_id_prod, tr_id_categ, tr_sk, tr_ves, tr_price, tr_ves_p, tr_date, tr_time, tr_user, tr_oper)
(select 1, (select p_id_categ from product where p_id = 1), 1, 'кг', 250, 'Руб', '07.07.2013', '06:05:00 PM', 1, 0)
А вот насчет записи строкой в Дату и Время, тут могут быть сюрпризы. Например, если у вас стоит формат системной даты MM.DD.YYYY или время задается в 24 часовом формате. Лучше сразу в запросе приводите к нужному типу. Для MSSQL например есть функции Cast и Transform для этого. Вы к какой БД подключаетесь - то?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 29.08.2013, 18:33
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

та скорее всего BDE не потянет вложенные запросы, да еще и в insert.
зыж. еще как вариант: конструкция
Код:
(select p_id_categ from product where p_id = 1)
возвращает более 1й строки и это "путает карты". нужно или сгрупировать или указать выбор только 1й строки.
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
  #6  
Старый 29.08.2013, 23:40
malkhazi malkhazi вне форума
Прохожий
 
Регистрация: 28.08.2013
Сообщения: 4
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Спасибо Страдалецъ за ответ. выполнил запрос с новым синтаксисом, но безрезультатно, выдает ошибку.

Invalis use of keyword
Token (select
Liner number 3


Это здесь

(select 1, (select p_id_categ from product where p_id = 1), 1, 'кг', 250, 'Руб', '07.07.2013', '06:05:00 PM', 1, 0)

для даты и времени я использую процедуры делфи в запросе DocodeDate() и DecodeTime()

Yurk@ правильно заметил,я использую СУБД BDE обе части (база и клиентская программа) на одной машине, подумал легче использовать BDE или MS Access но Access как я узнал не дружит с вложенными запросами, в принципе - как уже понял - BDE тоже не дружит.

Я изменил структуру таблиц и таким образом достиг цели.


Спасибо всем кто участвовал.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:19.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025