Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выборка из таблицы ADO... 
:(
    Опции темы
Teleport
Дата 9.7.2008, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Простой вопрос не могу решить. 
Вобщем мой пример - простой органайзер. Ну или вообще записная книжка. 
На форме есть календарь, в котором отображен текущий месяц по дням. Там можно другие месяцы выбирать и другие года.
При нажатии кнопки Сохранить на выбранную дату записыввается событие (из поля Edit) и сохраняется в базу данных.
При нажатии кнопки Очистить - выбранное в DBGrid событие из бд удаляется.

Думаю общий смысл объяснил.
Теперь вопрос: Мне нужно чтобы в StringGrid отображались все дни, в которых есть сохраненные события, на текущем или другом выбранном месяце. 

Скидываю исходник. Там мало кода. Самое основное.

Присоединённый файл ( Кол-во скачиваний: 8 )
Присоединённый файл  na_forum_ADO.rar 14,00 Kb


--------------------
user posted image
user posted image 
PM MAIL   Вверх
Данкинг
Дата 9.7.2008, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



"Class TCalendar not found".  smile 

Ну а вообще запрос мне пришёл в голову такой:

Код

select * from 1t where cstr(date) like '*.05.*'

(выдираешь месяц из этого календаря и подставляешь вместо .05. )


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Teleport
Дата 10.7.2008, 00:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



как это не найден?? smile  smile 
В ДЕлфи 7 на вкладке Samples !!! 6-ой слева!  smile 
Вроде стандартный компонент... Никогда проблем не было с ним... хм...

У меня же без проблем компилируется...  smile 

А вот з запросом сложнее - я вообще два дня уже мучаюсь - не могу понять как этот запрос делается...
С ADO только начал работать.


--------------------
user posted image
user posted image 
PM MAIL   Вверх
Данкинг
Дата 10.7.2008, 02:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Цитата(Teleport @  10.7.2008,  01:47 Найти цитируемый пост)
В ДЕлфи 7 на вкладке Samples !!! 6-ой слева! 

А, это там ещё TGauge должен быть? У меня этой вкладки нет, видимо, я её почему-то не поставил при инсталляции. smile 

Цитата(Teleport @  10.7.2008,  01:47 Найти цитируемый пост)
не могу понять как этот запрос делается...

Что конкретно? Запрос через AdoQuery делается, ищи примеры. smile 


Это сообщение отредактировал(а) Данкинг - 10.7.2008, 02:01


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Teleport
Дата 10.7.2008, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата
А, это там ещё TGauge должен быть?

 - точно smile именно там.
примеры находил с  AdoQuery, но я чего-то не понимаю, все равно не получается. Несколько дней подряд. 
Конкретно нужно:

В таблице есть поле с датами и поле с событиями. день месяц год - событие. 
например:

01.07.2008 - событие1
05.07.2008 - событие2
19.07.2008 - событие3
03.08.2008 - событие4
22.08.2008 - событие5
08.09.2008 - событие6
11.09.2008 - событие7
18.09.2008 - событие8
15.07.2008 - событие9
12.07.2008 - событие 10

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

03
22  


А если ввожу 07 и 2008, то получаю

01
05
12
15
19


Думаю, что это очень просто, но вот засел и немогу.

Это сообщение отредактировал(а) Teleport - 10.7.2008, 14:04


--------------------
user posted image
user posted image 
PM MAIL   Вверх
1Andrey1
Дата 11.7.2008, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ничего не понятно что тебе нужно...

добавляешь компонент TADOQuery(практически так же как и TADOTable, т.е. связываешь с datasource и dbgrid), у него есть свойство "SQL" вот туда вписываешь запрос и выставляешь active в true. На счет составления запроса читай доки по SQL. Например вот этот запрос "select * from 1t" покажет все записи из твоей таблицы, если надо не все, а какието определенные, то обычно используется конструкция where  like (то, о чем тебе говорил Данкинг ) а вообще почитай любую книжку по работе с БД

P.S. В ConnectionString лучше указывать не абсолютный путь к базе данных, а просто имя файла, тогда программа будет искать базу рядом с экзешником, где бы он не находился
 
PM MAIL ICQ   Вверх
Teleport
Дата 11.7.2008, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



я уже не знаю как правильно объяснить, что мне нужно  smile  smile  smile 

вот кидаю исходник вместе с базой данных.

Там есть Edit1 и Edit2 и кнопка Button. Также есть в папке рядом база данных в Access. А в базе данных есть таблица. В таблице есть два поля. Дата и Событие. Вот как заполнены эти поля:

01.07.2008 - событие1
05.07.2008 - событие2
19.07.2008 - событие3
03.08.2008 - событие4
22.08.2008 - событие5
08.09.2008 - событие6
11.09.2008 - событие7
18.09.2008 - событие8
15.07.2008 - событие9
12.07.2008 - событие 10

так вот в программе я ввожу в Edit1  месяц , а в Edit2 - год. И нажимаю Button. В итоге мне нужно, чтобы куда-нибудь на форме, хоть в DBGrid, хоть куда вывелся список дней, на которые записаны события.
вот в 07 месяце и 2008 году 5 событий. А дни, в которые записаны события вот такие:
01, 05, 12, 15, 19. - это видно в таблице выше. 

ввожу в Edit1 07, а в Edit2 - 2008 - и мне должен быть выведен список 01, 05, 12, 15, 19
ввожу в Edit1 08, а в Edit2 - 2008 - и мне должен быть выведен список 03, 22
ввожу в Edit1 09, а в Edit2 - 2008 - и мне должен быть выведен список 11, 18.



Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  na_forum_ADO111.rar 13,76 Kb


--------------------
user posted image
user posted image 
PM MAIL   Вверх
1Andrey1
Дата 11.7.2008, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



вот лови

там единственное что может быть непонятно это вот это:

Код

SearchDate:='%.'+edit1.Text+'.'+edit2.Text;
///////////////////////////////////////////////////////
adoquery1.SQL.Add('select * from 1t');
adoquery1.SQL.Add('where date like '''+SearchDate+'''');


символ "%" в SQL запросе обозначает любое количество любых символов. То есть получается у нас запрос типа "показать все записи, поле "date" которых сдержит любые символы, плюс то что мы ввели в эдиты" 

Это сообщение отредактировал(а) 1Andrey1 - 11.7.2008, 23:01

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  adoquery.rar 9,67 Kb
PM MAIL ICQ   Вверх
Teleport
Дата 11.7.2008, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



2 1Andrey1  - да!!! то что надо!! Спасибо огромное!!!   smile  smile  smile 
На четырех форумах спрашивал, никто не сказал как сделать  smile 

Только вот еще пара вопросиков:
1) строка 
Код
listbox1.Items.Append(adoquery1.FieldByName('date').AsWideString);

не прокатывает. Пишет ошибку.  [Error] Unit1.pas(55): Undeclared identifier: 'AsWideString'

2) а если использовать не AsWideString, а AsString , то вроде компилируется, но ListBox отображает одинаковые значения всегда:
01.07.2008
01.07.2008
01.07.2008
01.07.2008
01.07.2008

или
03.08.2008
03.08.2008

Можно чтобы разные показывал? 
вот так:
01.07.2008
05.07.2008
12.07.2008
15.07.2008
19.07.2008

чего еще написать, чтобы AsWideString компилировалась нормально?


--------------------
user posted image
user posted image 
PM MAIL   Вверх
1Andrey1
Дата 11.7.2008, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Teleport @ 11.7.2008,  23:16)
отображает одинаковые значения всегда

Блин, точно... это я забыл... должно быть вот так:

Код

procedure TForm1.Button2Click(Sender: TObject);
var
i:integer;
SearchDate:string;
begin
SearchDate:='%.'+edit1.Text+'.'+edit2.Text;

adoquery1.Active:=false;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select * from 1t');
adoquery1.SQL.Add('where date like '''+SearchDate+'''');
adoquery1.Active:=true;


listbox1.Items.Clear;
adoquery1.First;  // становимся на первую запись
for I := 0 to adoquery1.RecordCount - 1 do
  begin
    listbox1.Items.Append(adoquery1.FieldByName('date').AsWideString);
    adoquery1.Next; //переходим на следующую
  end;

end;


а на счет WideString и String без разницы просто это моему 2007 delphi больше нравятся большие строки smile

Это сообщение отредактировал(а) 1Andrey1 - 11.7.2008, 23:40
PM MAIL ICQ   Вверх
Teleport
Дата 12.7.2008, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Здорово!!!  smile  smile  smile  smile 
Спасибо!!! Выручил офигительно просто. smile
Все работает как надо!
Теперь без проблем привяжу все к своей программке )))))))))))))
Еще раз - ОГРОМНОЕ СПАСИБО!  smile 


--------------------
user posted image
user posted image 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


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

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


 




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


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

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