Консультация № 185626
20.03.2012, 11:08
76.63 руб.
0 26 1
Уважаемые эксперты! Пожалуйста, ответьте на вопрос: Есть таблица в MS Access со столбом "срок" в которой дата записывается в формате дд.мм.гггг. Все это подлкючено через ADOConnection DataSourse и ADOTable. Задача следующая. Нужно сравнить даты из это столба, с текущей датой и вывести в ListBox те, которые больше, не более чем на 10 дней текущей даты.

Обсуждение

Неизвестный
20.03.2012, 14:11
общий
Уточните, пожалуйста, среду разработки.
И ещё скажите, пожалуйста, у Вас есть этот файл excel и программа с подключением через ADOConnection DataSourse и ADOTable? Если что-то из этого имеется, выложите.
Неизвестный
20.03.2012, 17:00
общий
Embarcadero C++. Базу и исходники выложил
Прикрепленные файлы:
b4798cdf46cd93355972ff627b548035.rar
Неизвестный
21.03.2012, 19:14
общий
Уважаемые эксперты, обратите, пожалуйста, внимание! может быть, у кого-то есть эта экзотичная среда?
давно
Старший Модератор
17042
808
22.03.2012, 07:10
общий
В принципе, среда не экзотичная. Это теперь так Borland C++ Builder называется, после приобретения Embarcadero.
Об авторе:
We have but faith: we cannot know;
For knowledge is of things we see;
And yet we trust it comes from thee,
A beam in darkness: let it grow.
-----
https://www.linkedin.com/in/andreynkuznetsov
https://www.researchgate.net/profile/Andrey_Kuznetsov11
http://www.researcherid.com/rid/K-8824-2014
давно
Профессор
230118
3054
22.03.2012, 11:42
общий
Borland C++ Builder сможет открыть проект? Я попробую, хотя времени мало.
Неизвестный
22.03.2012, 13:57
общий
Адресаты:

Это да, я в Википедии прочитала) Но у меня только Borland 6.0 из этой серии.
Неизвестный
22.03.2012, 13:57
общий
Адресаты:

Я продлила, попробуйте.
давно
Старший Модератор
17042
808
22.03.2012, 14:23
общий
Адресаты:


Нсколько я помню, Builder / Turbo / Embarcadero открывает проекты младших версий, если использовались только стандартные компоненты из VCL.
Об авторе:
We have but faith: we cannot know;
For knowledge is of things we see;
And yet we trust it comes from thee,
A beam in darkness: let it grow.
-----
https://www.linkedin.com/in/andreynkuznetsov
https://www.researchgate.net/profile/Andrey_Kuznetsov11
http://www.researcherid.com/rid/K-8824-2014
Неизвестный
22.03.2012, 14:30
общий
Адресаты:

Borland C++ Builder 6.0 не открывает... Ну по крайне мере у меня.
давно
Профессор
230118
3054
22.03.2012, 18:40
общий
Поставила Эмбаркадеро. При открытии проекта просит логин и пароль для базы.
Неизвестный
22.03.2012, 19:03
общий
Совсем в детстве я через ADO ходил в MS Access и MSSQL, поэтому помню мало.

Надо делать так: выполнить select * from table_name where table_date > to_date('32/03/2012', 'MM/DD/YY')

Только надо убедиться, что to_date поддерживается вашей базой данных.
И - сделать преобразование +10 дней, тут я не силён, никогда не доводилось, но судя по всему, это всё можно сделать прям в запросе(то, что выше, из oracle)

ADO, список получить можно в рекодсет, как-нибудь вот так:

Код:
	_RecordsetPtr	rcsTableSet	=NULL;
_bstr_t bsTable;
_bstr_t bsCmdLine = TEXT("select * from table_name where table_date > to_date('32/03/2012', 'MM/DD/YY')");

TESTHR(rcsTableSet.CreateInstance(__uuidof(Recordset)));

try
{ rcsTableSet->Open(bsCmdLine,szReq,adOpenForwardOnly, adLockReadOnly, adCmdText);
rcsTableSet->MoveFirst();
while (!rcsTableSet->EndOfFile)
{
// тут выгребаем строчки из рекордсетаSendMessage
bsTable = rcsTableSet->Fields->GetItem("Some_field")->Value.bstrVal;
(hCombo,CB_ADDSTRING,0,(long)(char *)bsTable);
rcsTableSet->MoveNext();
}
SendMessage(hCombo,CB_SETCURSEL,-1,0);
rcsTableSet->Close();
}catch(_com_error &e)
{ char Msg[256];
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
sprintf(Msg,"Source : %s \n Description : %s \n",(LPCSTR)bstrSource,(LPCSTR)bstrDescription);
MessageBox(NULL,Msg,"Exeption occured",MB_OK | MB_APPLMODAL);
return 1;
}


В MSDN-e море примеров есть про _RecordsetPtr, _CommandPtr и прочие радости ADO
Неизвестный
22.03.2012, 19:05
общий
Мой IE как-то трясло, пока я код вбивал там ошибочка

Код:
			// тут выгребаем строчки из рекордсета
bsTable = rcsTableSet->Fields->GetItem("Some_field")->Value.bstrVal;
SendMessage(hCombo,CB_ADDSTRING,0,(long)(char *)bsTable);
rcsTableSet->MoveNext();


давно
Профессор
230118
3054
22.03.2012, 19:18
общий
1 В базе ассесс создала query1, в котором происходит фильтрация по условию SELECT Таблица1.Код, Таблица1.Улица, Таблица1.Активность, Таблица1.Фамилия, Таблица1.Компания, Таблица1.Срок, Таблица1.Телефон
FROM Таблица1
WHERE (((Таблица1.Срок)>=Date() And (Таблица1.Срок)<=Date()+10));

Далее в ADOTable1 ставим источником не таблицу, а этот query1
Неизвестный
22.03.2012, 19:23
общий
Адресаты:

Там не надо ни логина, ни пароля. Просто оставляйте пустые поля.
И базу перезалил, а то та каким-то образом оказалась пустой)
Прикрепленные файлы:
88016a934d00338e6f4187b2436ba4fd.rar
давно
Профессор
230118
3054
22.03.2012, 19:40
общий
Не такая уж пустая, я сама туда что-то ввела.
Чтобы работало, следите, чтобы ADOTable параметр Active был True.
Еще можно было Filter заполнить, но там не работает функция Date, которая нужна, чтобы всегда брать текущую дату. Для фиксированной даты можно было бы не создавать query, а фильтровать прямо в ADOTable.
давно
Профессор
230118
3054
22.03.2012, 19:58
общий
Вы имели в виду ввод в TDBLookupListBox, а не обычный ListBox?
давно
Профессор
230118
3054
22.03.2012, 20:01
общий
Если получилось, сообщите. Если нет, тоже. Я оформлю ответ.
Неизвестный
22.03.2012, 20:03
общий
Адресаты:

Вывод в обычный ListBox.
Неизвестный
22.03.2012, 20:14
общий
Кинул на форму ADOQuery сделал ему SQL запрос.
Вот код:
ListBox1->Clear();
ADOQuery1->First();
for(i=0;i<ADOQuery1->RecordCount;i++)
{
ListBox1->Items->Add(ADOQuery1->FieldByName("Улица")->AsString);
ADOQuery1->Next();
}
Вроде получилось что хотел...
Спасибо!
давно
Профессор
230118
3054
22.03.2012, 20:20
общий
Спасибо кому?
Неизвестный
22.03.2012, 20:26
общий
Адресаты:

Вам конечно. Я у Вас тут впервые, какие мои дальнейшие действия?
давно
Профессор
230118
3054
22.03.2012, 20:57
общий
Код же Вы сами написали. А запрос добавили в базу или ADOQuery?
Я могу написать ответ, Вы его можете оценить.
Неизвестный
22.03.2012, 21:01
общий
Напишите ответ, оценю. Вы меня подтолкнули к правильному решению)
давно
Профессор
230118
3054
22.03.2012, 21:01
общий
это ответ
Здравствуйте, Шаталов Виктор Олегович!

Совместными усилиями получилось следующее

Создаем ADOQuery, в котором задаем запрос SELECT Таблица1.Код, Таблица1.Улица, Таблица1.Активность, Таблица1.Фамилия, Таблица1.Компания, Таблица1.Срок, Таблица1.Телефон
FROM Таблица1
WHERE (((Таблица1.Срок)>=Date() And (Таблица1.Срок)<=Date()+10));

Заполняем ListBox с помощью следующего кода
Код:
ListBox1->Clear();
ADOQuery1->First();
for(i=0;i<ADOQuery1->RecordCount;i++)
{
ListBox1->Items->Add(ADOQuery1->FieldByName("Улица")->AsString);
ADOQuery1->Next();
}
5
Неизвестный
22.03.2012, 21:15
общий
Тему можно закрывать.
давно
Профессор
230118
3054
22.03.2012, 22:17
общий
Спасибо!
Форма ответа