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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2017, 09:49   #1
Sentinel2h
Пользователь
 
Регистрация: 23.05.2017
Сообщений: 16
По умолчанию Помогите написать код в Delphi для БД.

Базу делаю в Paradox 7
1.Определить количество путевок заданного вида отдыха,цена которые не превышает заданную.
2.Определить max продолжительность трех путевок в заданной стране.
Только код в не SQL.

Последний раз редактировалось Sentinel2h; 23.05.2017 в 09:54.
Sentinel2h вне форума Ответить с цитированием
Старый 23.05.2017, 09:54   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Ну во-первых, Вы сами что-то пытались сделать? Если да - показывайте и объясните, в чём конкретно проблема.
Во-вторых, это задание делается на чистом SQL, дельфи тут нужна только для визуализации данных и результатов.

Поэтому

Цитата:
Только код в не SQL.
не получится
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 23.05.2017, 10:03   #3
Sentinel2h
Пользователь
 
Регистрация: 23.05.2017
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Sciv Посмотреть сообщение
Ну во-первых, Вы сами что-то пытались сделать? Если да - показывайте и объясните, в чём конкретно проблема.
Во-вторых, это задание делается на чистом SQL, дельфи тут нужна только для визуализации данных и результатов.

Поэтому



не получится
Код:
begin

Form1.Table1.First;
repeat;
if (form1.Table1.FieldValues['Vid']=combobox1.Text) and (form1.Table1.FieldValues['Cena']<Edit1.Text) then
Form1.Table1.Next;
until Form1.Table1.eof;
form1.table1.First;
Form1.Table1.Filtered:=true;
Form1.Table1.Filter:='Vid='+QuotedStr(ComboBox1.text)+'and Cena='+QuotedStr(Edit1.Text); }
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 23.05.2017 в 10:36.
Sentinel2h вне форума Ответить с цитированием
Старый 23.05.2017, 10:36   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Sentinel2h Посмотреть сообщение
Только код в не SQL.
ну, конечно, можно и без SQL обойтись (хотя, внутри TTable тот же SQL и используется, только он скрыт)
Только разрешите поинтересоваться - А ЗАЧЕМ? Чем вызвано такое требование?

код, который Вы написали - в корне неверен.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.05.2017, 10:42   #5
Sentinel2h
Пользователь
 
Регистрация: 23.05.2017
Сообщений: 16
По умолчанию

Извините это я ошибся,переспросил насчет SQl ошибся.Не могу исправить уже 2 день.Вот решил обратится сюда.У меня почему то при запуске Фильтра все что было заполнено в таблице исчезает.
Sentinel2h вне форума Ответить с цитированием
Старый 23.05.2017, 11:28   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Sentinel2h Посмотреть сообщение
Извините это я ошибся,переспросил насчет SQl ошибся.
т.е. мы были правы - и это надо сделать через SQL запросы?

p.s. покажите структуру таблицы
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.05.2017, 11:32   #7
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Код:
Cena='+QuotedStr(Edit1.Text)
Есть подозрение, что поле Cena задано вещественным типом в базе. В таком случае QuotedStr тут лишнее, оно заключает текст в кавычки внутри строки, а такое нужно применять только при сравнении со строковыми полями в БД. Ну и Vid - тоже проверьте, если не текстовое поле - quotedstr от него в топку.

Код:
Form1.Table1.First;
repeat;
if (form1.Table1.FieldValues['Vid']=combobox1.Text) and (form1.Table1.FieldValues['Cena']<Edit1.Text) then
Form1.Table1.Next;
until Form1.Table1.eof;
В чём смысл этого обхода таблицы? Как альтернатива filter он точно не годится (я думаю, Сергей это и имел в виду в посте выше)


Код:
Form1.Table1.Filtered:=true;
Form1.Table1.Filter:='Vid='+QuotedStr(ComboBox1.text)+'and Cena='+QuotedStr(Edit1.Text);
В этом куске в принципе некритично - технически дельфи не ругнётся и код выполнится. Но я бы переставил строки местами. Условно говоря, присвоение значения фильтру - это подготовка программы к запуску (инициализация), а активация фильтра - это уже сам запуск.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 23.05.2017, 11:36   #8
Sentinel2h
Пользователь
 
Регистрация: 23.05.2017
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
т.е. мы были правы - и это надо сделать через SQL запросы?

p.s. покажите структуру таблицы
Да вы были правы.
Изображения
Тип файла: jpg Новый точечный рисунок.jpg (116.7 Кб, 130 просмотров)
Sentinel2h вне форума Ответить с цитированием
Старый 23.05.2017, 11:52   #9
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Дико извиняюсь за придирчивость, но вообще-то внешний вид таблицы не имеет отношения к её структуре.

Структура - это тот код, который описывает поля таблицы (наименования, типы, ограничения, ключи таблицы). В случае с Акцессом: открываете таблицу в режиме конструктора и заводите там наименования полей и типы - это и есть структура.

UPDATE
Удалил последний комментарий, так как прочитал наконец про Paradox 7. Не думал, что он ещё жив...
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 23.05.2017, 11:55   #10
Sentinel2h
Пользователь
 
Регистрация: 23.05.2017
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Sciv Посмотреть сообщение
Код:
Cena='+QuotedStr(Edit1.Text)
Есть подозрение, что поле Cena задано вещественным типом в базе. В таком случае QuotedStr тут лишнее, оно заключает текст в кавычки внутри строки, а такое нужно применять только при сравнении со строковыми полями в БД. Ну и Vid - тоже проверьте, если не текстовое поле - quotedstr от него в топку.

Код:
Form1.Table1.First;
repeat;
if (form1.Table1.FieldValues['Vid']=combobox1.Text) and (form1.Table1.FieldValues['Cena']<Edit1.Text) then
Form1.Table1.Next;
until Form1.Table1.eof;
В чём смысл этого обхода таблицы? Как альтернатива filter он точно не годится (я думаю, Сергей это и имел в виду в посте выше)


Код:
Form1.Table1.Filtered:=true;
Form1.Table1.Filter:='Vid='+QuotedStr(ComboBox1.text)+'and Cena='+QuotedStr(Edit1.Text);
В этом куске в принципе некритично - технически дельфи не ругнётся и код выполнится. Но я бы переставил строки местами. Условно говоря, присвоение значения фильтру - это подготовка программы к запуску (инициализация), а активация фильтра - это уже сам запуск.
Цитата:
Сообщение от Sciv Посмотреть сообщение
Код:
Cena='+QuotedStr(Edit1.Text)
Есть подозрение, что поле Cena задано вещественным типом в базе. В таком случае QuotedStr тут лишнее, оно заключает текст в кавычки внутри строки, а такое нужно применять только при сравнении со строковыми полями в БД. Ну и Vid - тоже проверьте, если не текстовое поле - quotedstr от него в топку.

Код:
Form1.Table1.First;
repeat;
if (form1.Table1.FieldValues['Vid']=combobox1.Text) and (form1.Table1.FieldValues['Cena']<Edit1.Text) then
Form1.Table1.Next;
until Form1.Table1.eof;
В чём смысл этого обхода таблицы? Как альтернатива filter он точно не годится (я думаю, Сергей это и имел в виду в посте выше)


Код:
Form1.Table1.Filtered:=true;
Form1.Table1.Filter:='Vid='+QuotedStr(ComboBox1.text)+'and Cena='+QuotedStr(Edit1.Text);
В этом куске в принципе некритично - технически дельфи не ругнётся и код выполнится. Но я бы переставил строки местами. Условно говоря, присвоение значения фильтру - это подготовка программы к запуску (инициализация), а активация фильтра - это уже сам запуск.
Извините что я не очень понял,не могли бы вы исправить код.
Sentinel2h вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пожалуйста. Задание такое: написать макросы для перевода числа в строку, для вывода строки на терминал, для остановки программы. Код приведен ниже. Укажите пожалуйста что Нести Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 01.11.2016 09:26
Помогите написать код на Delphi на тему динамические структуры данных Yustinka Помощь студентам 0 07.06.2015 23:25
помогите написать код на Delphi или Pascal AAR555 Помощь студентам 0 26.05.2015 17:58
Помогите написать код в Delphi exbv1 Помощь студентам 1 16.03.2015 09:47
Помогите написать код для торта!!! Хладна_Вода Свободное общение 37 28.10.2013 11:11