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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2014, 12:36   #1
вася радугов
Форумчанин
 
Регистрация: 09.04.2011
Сообщений: 134
По умолчанию Delphi и база данных Access

Помогите, пожалуйста, разобраться с этими вопросами:
1) Есть у меня БД в Access, в ней таблица Приход. Вывожу ее на форму с помощью DBGrid, ADOTAble, ADODataSource. В таблице есть следующие колонки: дата прихода, наименование товара, количество, цена, сумма. Как сделать, чтобы можно было смотреть приход товара на конкретный день, т.е. хочешь посмотреть например, какой товар пришел вчера. Хотел использовать компонент DatеTimePicker, выбираю дату, но в таблице выходят все даты прихода.
2)Вывожу на печать ту же таблицу Приход. Сначала выгружаю таблицу в Excel. Аналогичный вопрос, как сделать, чтобы перед выводом на печать можно было выбирать с какой по какую дату необходимо вывести данные. Вот код, который у меня получился:
Код:
procedure TForm1.N18Click(Sender: TObject);
var
XLApp,Sheet,Colum:variant;
index,i:integer;
begin
 XLApp:=CreateOleObject('excel.application');
 XLApp.Visible:=true;
 XLApp.Workbooks.add(-4167);
 XLApp.workbooks[1].worksheets[1].name:='otchet';
 Colum:=XLApp.workbooks[1].worksheets['otchet'].Columns;
 colum.columns[1].columnwidth:=30;
 colum.columns[2].columnWidth:=20;
 colum.columns[3].columnwidth:=20;
 colum.columns[4].columnwidth:=20;
 colum.columns[5].columnwidth:=20;

 colum:=XLApp.workbooks[1].worksheets['otchet'].rows;
 colum.rows[2].font.bold:=true;
 colum.rows[1].font.bold:=true;
 colum.rows[1].font.color:=clblue;
 colum.rows[1].font.size:=14;

 sheet:=XLApp.workbooks[1].worksheets['otchet'];
 sheet.cells[1,2]:='Ведомость прихода товара';
 sheet.cells [2,1]:='Наименование';
 sheet.cells [2,2]:='Количество';
 sheet.cells [2,3]:='Цена';
 sheet.cells [2,4]:='Дата прихода';
  sheet.cells [2,5]:='Сумма';
 index:=3;
 form7.ADOtable1.First;
 for i:=0 to form7.ADOtable1.RecordCount-1 do
 begin
 sheet.cells [index,1]:=form7.ADOtable1.Fields.Fields[4].AsString;
 sheet.cells [index,2]:= form7.ADOtable1.Fields.Fields[5].AsString;
 sheet.cells [index,3]:=form7.ADOtable1.Fields.Fields[6].AsString;
 sheet.cells [index,4]:=form7.ADOtable1.Fields.Fields[8].AsString;
  sheet.cells [index,5]:=form7.ADOtable1.Fields.Fields[9].AsString;
 inc(index);
 form7.ADOtable1.Next;
end;
end;
вася радугов вне форума Ответить с цитированием
Старый 10.02.2014, 12:43   #2
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

ADOQuery + SQL запрос.
В соседней теме как раз обсуждаем.
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 10.02.2014, 13:34   #3
вася радугов
Форумчанин
 
Регистрация: 09.04.2011
Сообщений: 134
По умолчанию

А как запрос прицепить к DateTimePicker?
вася радугов вне форума Ответить с цитированием
Старый 10.02.2014, 13:48   #4
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Сообщение от вася радугов Посмотреть сообщение
А как запрос прицепить к DateTimePicker?
Может лучше наоборот DateTimePicker к запросу? Создайте запрос с параметрами типа дата и подставляйте в них значения из DateTimePicker.
Streletz вне форума Ответить с цитированием
Старый 10.02.2014, 14:15   #5
вася радугов
Форумчанин
 
Регистрация: 09.04.2011
Сообщений: 134
По умолчанию

Хочу сделать так. Есть два DataTimePicker, типа один "от" такой-то даты, другой "до" такой-то даты. Напротив каждого из них СheckBox. Если CheckBox.checked=true, то DataTimePicker активен. Пишу запрос так, но выходит ошибка: Unterminated String

Код:
procedure TForm7.CheckBox1Click(Sender: TObject);
begin
if checkbox1.Checked=true  then  begin
 form7.ADOQuery1.SQL.Add('SELECT prihod.data_prihod');
 form7.ADOQuery1.SQL.Add ('FROM prihod');
 form7.ADOQuery1.SQL.Add (' GROUP BY prihod.data_prihod ');
 form7.ADOQuery1.SQL.Add ('QuotedStr(DateToStr(DateTimePicker1.Date))')';
 end;
end;
Как исправить ошибку?
вася радугов вне форума Ответить с цитированием
Старый 10.02.2014, 14:18   #6
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Разобраться со строками (как формируются) и синтаксисом, потому что одна кавычка в последней строке точно лишняя.
И да, вы добавляете в строку не преобразованную в string дату, а строку вида "QuotedStr(DateToStr(DateTimePicker 1.Date))"
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 10.02.2014, 14:24   #7
вася радугов
Форумчанин
 
Регистрация: 09.04.2011
Сообщений: 134
По умолчанию

Вы правы. Спасибо. Последнюю кавычку убрал, ошибка исчезла. Программа запустилась.Но при нажатии на CheckBox ничего не происходит.
вася радугов вне форума Ответить с цитированием
Старый 10.02.2014, 14:40   #8
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

А, ADOQuery соединяется с БД после формирования запроса. Перед динамическим формирование необходимы разъединение и очистка. После его формирования, необходимо повторное соединение. Поэтому, чтобы запрос отрабатывал необходимо слегка модифицировать Ваш код. То, что я изменил, подчёркнуто.
Код:
procedure TForm7.CheckBox1Click(Sender: TObject);
begin
if checkbox1.Checked=true  then  
 begin
 form7.ADOQuery1.Close;
 form7.ADOQuery1.SQL.Clear;
 form7.ADOQuery1.SQL.Add('SELECT prihod.data_prihod');
 form7.ADOQuery1.SQL.Add ('FROM prihod');
 form7.ADOQuery1.SQL.Add (' GROUP BY prihod.data_prihod ');
 form7.ADOQuery1.SQL.Add ('QuotedStr(DateToStr(DateTimePicker1.Date))')';
 form7.ADOQuery1.Open;
 end;
end;
К стати, ADOQuery связан с каким-нибудь DBGrid или другим компонентом из DataControls?
Streletz вне форума Ответить с цитированием
Старый 10.02.2014, 15:07   #9
вася радугов
Форумчанин
 
Регистрация: 09.04.2011
Сообщений: 134
По умолчанию

ADOQuery связан с DBGrid , в который я вывожу свою таблицу.

Исправил код,
Код:
if checkbox1.Checked=true  then  begin
 form7.ADOQuery1.Close;
 form7.ADOQuery1.SQL.Clear;
 form7.ADOQuery1.SQL.Add('SELECT prihod.datа_prihod');
 form7.ADOQuery1.SQL.Add ('FROM prihod');
 form7.ADOQuery1.SQL.Add (' GROUP BY prihod.datа_prihod ');
 form7.ADOQuery1.SQL.Add (' QuotedStr(DateToStr(DateTimePicker1.Date)');
 form7.ADOQuery1.Open;
 end;
но теперь когда ставишь галочку в Сheckbox выходит ошибка:

Project1.exe raised exception class EOLeException with message 'Ошибка синтаксиса (пропущен оператор) в выражении запроса prihod.data_prihod QuotedToStr (dateToStr(DataTimePicker1.Date)''. Process stopped. Use Step or Run to continue.

С чем это связано? До этого же не было ошибки?
вася радугов вне форума Ответить с цитированием
Старый 10.02.2014, 15:18   #10
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Ошибки просто не было видно, по той простой причине, что у Вас не отрабатывал запрос. Теперь, когда запрос поступает в БД, ядро СУБД, русским языком пишет об ошибке синтаксиса.
Проверяйте и исправляйте запрос. Проверьте формат строкового представления даты. Для того, чтобы Access его правильно воспринял оно должно соответствовать определённым требованиям.
В помощь: проблема с датой в Access.
Streletz вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Клиент-серверная база данных (Access + Delphi) alen04ka92 Фриланс 2 20.07.2012 04:57
Клиент-серверная база данных (желательно delphi и access) Selensio Фриланс 3 08.07.2012 15:02
База данных Access + Delphi Марсель21 Помощь студентам 0 11.05.2012 13:09
База данных access и delphi Fastah Помощь студентам 1 21.12.2010 16:36
База Данных. Access и Delphi skrudjmagdak Помощь студентам 2 05.01.2010 20:12