Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » FAQ по Borland C++ Builder

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

Открыть новую тему     Написать ответ в эту тему

clear2121



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ПРивет всем! Задумался над таким вопросом.
ПРедставьте - имеем 3 ADOQuery - Q1, Q2, Q3. Делаем запрос с помощью Q1. Получаем данные. Теперь я хочу, чтоб полученные данные попали в Q2 и отобразились в Grid1. Затем сделать запрос в Q1 и данные передать в Q3 и отобразить в Grid2.
Не могу сообразить, как это сделать. И можно ли вообще это сделать?
 
СПАСИБО!

Всего записей: 311 | Зарегистр. 07-04-2005 | Отправлено: 09:15 04-12-2009
Tantos



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
clear2121
Зачем такие сложности? Почему бы просто не использовать Q2 и Q3 для запросов? Зачем использовать Q1? Гриды к ADOQuery прикручиваются через TDataSource.

----------
Чем больше узнаю людей, тем больше люблю компьютеры.

Всего записей: 1038 | Зарегистр. 31-05-2005 | Отправлено: 04:11 07-12-2009
clear2121



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Tantos
идея, в общем, проста. Сделать класс, в нём есть ADOQuery. Мы формируем строку запроса и посылаем в класс, а он нам присылает данные, которые мы отображаем. А Квери мы просто объявляем.

Всего записей: 311 | Зарегистр. 07-04-2005 | Отправлено: 09:31 08-12-2009
Tantos



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Т.е. ты хочешь результаты работы одного ADOQuery передать в другой ADOQuery? См. свойство ADOQuery::Recordset в этом случае.

----------
Чем больше узнаю людей, тем больше люблю компьютеры.

Всего записей: 1038 | Зарегистр. 31-05-2005 | Отправлено: 11:46 08-12-2009
clear2121



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Tantos
Спасибо, пошёл читать. Если что, буду спрашивать.

Всего записей: 311 | Зарегистр. 07-04-2005 | Отправлено: 16:12 08-12-2009
kot3

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Никто не подскажет что я делаю не так?
Вроде бы в RAD2010 декларирована поддержка DirectShow.
Пишу:
#include <DirectShow9.hpp>
 
И в ответ получаю:
[BCC32 Error] Directsound.hpp(61): E2316 'PD3DValue' is not a member of 'Dxtypes'
[BCC32 Error] Directsound.hpp(61): E2040 Declaration terminated incorrectly
[BCC32 Error] Directsound.hpp(67): E2316 'PD3DVector' is not a member of 'Dxtypes'
[BCC32 Error] Directsound.hpp(67): E2040 Declaration terminated incorrectly
[BCC32 Error] Directsound.hpp(123): E2316 'PReferenceTime' is not a member of 'Dxtypes'
[BCC32 Error] Directsound.hpp(123): E2040 Declaration terminated incorrectly
[BCC32 Error] Direct3d9.hpp(53): E2316 'PD3DVector' is not a member of 'Dxtypes'
[BCC32 Error] Direct3d9.hpp(53): E2040 Declaration terminated incorrectly
[BCC32 Error] DirectShow9.hpp(237): E2451 Undefined symbol 'IDirectShowStream'
[BCC32 Error] DirectShow9.hpp(237): E2299 Cannot generate template specialization from 'DelphiInterface<T>'
[BCC32 Error] DirectShow9.hpp(237): E2040 Declaration terminated incorrectly
[BCC32 Error] DirectShow9.hpp(488): E2316 'PReferenceTime' is not a member of 'Dxtypes'
[BCC32 Error] DirectShow9.hpp(488): E2040 Declaration terminated incorrectly
[BCC32 Error] DirectShow9.hpp(656): E2257 , expected
[BCC32 Error] DirectShow9.hpp(1268): E2257 , expected
[BCC32 Error] DirectShow9.hpp(1270): E2257 , expected
[BCC32 Error] DirectShow9.hpp(1652): E2257 , expected
[BCC32 Error] DirectShow9.hpp(1654): E2257 , expected
[BCC32 Error] DirectShow9.hpp(1686): E2257 , expected
[BCC32 Error] DirectShow9.hpp(1692): E2257 , expected
[BCC32 Error] DirectShow9.hpp(1704): E2257 , expected
[BCC32 Error] DirectShow9.hpp(1706): E2257 , expected
[BCC32 Error] DirectShow9.hpp(1708): E2257 , expected
[BCC32 Error] DirectShow9.hpp(1712): E2257 , expected
[BCC32 Error] DirectShow9.hpp(1716): E2257 , expected
[BCC32 Error] DirectShow9.hpp(1720): E2257 , expected
[BCC32 Error] DirectShow9.hpp(1722): E2257 , expected
[BCC32 Error] DirectShow9.hpp(1724): E2257 , expected
[BCC32 Error] DirectShow9.hpp(1726): E2257 , expected
[BCC32 Error] DirectShow9.hpp(1748): E2257 , expected
 
Спасибо.

Всего записей: 430 | Зарегистр. 15-12-2005 | Отправлено: 08:52 13-12-2009
asi81



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
clear2121
Если я правильно  понимаю, Вы хотите сделать Sql запрос к AdoQuery и отобразить результат в другом AdoQuery. Это, вроде как невозможно - так как компонент AdoQuery не является базой данных и не может обрабатывать sql запросы.  Если же просто надо взять данные из AdoQuery и наложить на них дополнительный фильтр, то поможет такой подход
 
TClientDataSet* a = new TСlientDataSet(NULL);
a->CloneCursor(AdoQuery ,0,0);
a->Filter =  "мой фильтр";
a->Filtered = true;
 
и грид привязываете к ClientDataSet
 
 
Добавлено:
Недавно столкнулся с проблемой, которая мне просто выносит мозг.
В свое время перенес один проект на юникод, когда переходил с 6го билдера на 2009.
Все вызовы c_str() заменил на t_str() и радовался бы жизни. Но!  Второй раз замечаю, что t_str() искажает результаты! Тоесть если текст был "12345", результат t_str() может быть "1234sd".  Такое ощущение, что она после вызова t_str() сам обьект строки берет и делает чтото со своими внутренними данными. Стоит 2009 билдер и 4й патч.  
Кто-нибудь сталкивался с подобной проблемой?

Всего записей: 86 | Зарегистр. 08-06-2009 | Отправлено: 17:09 14-12-2009
clear2121



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
asi81
Почитал и понял - да нельзя из одного Квери в другой передавть данные.
 
А смысл вот в чём. Пишем класс для работы с таблицами. В нем есть Квери. Из программы присылаем запрос и класс подставляет его в Квери. Получаем данные. ОНИ В НАПИСАННОМ КЛАССЕ. А в проге есть 2 грида. Конечно, можно 2 Квери создать и каждый прикрутить к своему гриду. А хочется из Квери передать данные в один грид, затем в другой и потом с ними ещё работать.
 
Tantos
Читаю и, честно признаюсь, что то непонятно. Как?  
 
СПАСИБО!
 
 
Добавлено:
И ещё.
Может кто объяснит или ткнёт носом где почитать о следующем - как в TDataSource передать данные.  
Как пример. Есть тхт файл. Там через запятую информация. Типа CVS. Хочется вручную этот файл загрузить и отобразить в гриде через TDataSource.
 
БУДУ ВЕСЬМА ПРИЗНАТЕЛЕН!

Всего записей: 311 | Зарегистр. 07-04-2005 | Отправлено: 09:50 25-12-2009
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
clear2121
У RXLib видел компоненту MemoryTable. Попробуй в нее записать что нить и прикрутить к ней датасорс.
А так вообще текстовые файлы проще в обычную гриду сувать и правильнее.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 10:00 25-12-2009
clear2121



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShIvADeSt
СПАСИБО!
Но мне хочется сам принцип понять и тхт файл я указал как пример. Мне кажется, что это самый простой пример для понимания самого механизма.

Всего записей: 311 | Зарегистр. 07-04-2005 | Отправлено: 11:04 25-12-2009
asi81



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
clear2121
Во первых - датасорс никаких данных не хранит, поэтому запихнуть их туда нельзя и взять их из него тоже нельзя. Датасорс это посредник между датасетом и граф. интерфейсом.
Для того, чтобы что то впихнуть в любой датасет, который позволяет запись существует
 
DataSet->Append();
Field1->Value = Val1; // Заполнение полей новой строки
Field2->Value = val2;  
....
DataSet->Post();
 
Парсинг txt файла придется написать ручками
 
Если же ваш DataSet  явлеется TClientDataSet, то тогда можно данные хранить в xml формате, и тогда ручками ничего не надо будет писать.
 
Если ваш датасет не клиентский, то можно хранить ваши данные в xml формате, згружать их в дополниетльный  ClientDataSet, с теми же полями, что и ваш датасет и перекидывать данные из одного датасета в другой с помощью CopyFields - но эта функция доступна только в новых версиях билдера.

Всего записей: 86 | Зарегистр. 08-06-2009 | Отправлено: 12:32 25-12-2009
clear2121



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
asi81
спасибо, буду дальше копать. И конечно ручками запихивать. В этом вся суть. Хочу понять и попробовать САМ туда помещать данные.
 
СПАСИБО!
 
Добавлено:
Только вот скорость помещения туда данных, например с КВЕРИ, очень быстрая.  
Буду разбираться

Всего записей: 311 | Зарегистр. 07-04-2005 | Отправлено: 12:56 25-12-2009
asi81



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Недавно начал заниматься с датасетами. Столкнулся с проблемой, когда к примеру какой то механизмм работает с датасетом он постоянно перемещает курсор. Но иногда по какому то евенту другой механизм может дернуть курсор в своих целях. Какие типовые приемы существуют в ситуации когда два разных механизма работают с данными одного датасета?

Всего записей: 86 | Зарегистр. 08-06-2009 | Отправлено: 13:18 25-12-2009
volser

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
asi81
Кто такой механизм и как он работает с датасетом? Что значит одновременно? Потоки?
 
А вообще принцип работы прост. Перед работой сохранили текущую позицию. Отключили реакцию контролов. Сделали все действия. Восстановили состояние.

Всего записей: 713 | Зарегистр. 31-03-2006 | Отправлено: 16:46 25-12-2009
asi81



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
volser
под одновременно я понимал что в какой то момент работы с датасетом начинает происходить цепная рекция с событиями от контролов. Отключить их конечно выход. Но так как это глобальная таблица, на которую ссылаются почти половина фреймов в нехилом проекте. И есть вероятность что что-нибудь отключить я забуду. Все это вообще сподвигает меня просто сделать внутреннюю c++ таблицу без каких либо курсоров, так как из нее все равно все только читают.
 
 
 
 
 
 
Сегодня появился новый вопрос!  Хочу собрать сборку проекта, чтобы статически собирать с midas. Для того чтобы не было проблем с устаревшими библиотеками midas.dll, так как есть подозрение что один глюк происходит из-за некоректной версии midas.dll.    Пробовал вставлять в проект  
 
#pragma link "MidasLib"
 
Линковшик  меня посылает с фразой Unable to open file 'MIDASLIB.OBJ'
 
Пробовал добавить #pragma link "Midas" или просто добавить в проект midas.lib Проект стал больше на 250 кб - но тем не менее на машинах, где нет midas.dll он все равно ругается что не может найти midas.dll.  
 
У меня билдер 2009.

Всего записей: 86 | Зарегистр. 08-06-2009 | Отправлено: 18:05 25-12-2009 | Исправлено: asi81, 18:07 25-12-2009
volser

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
asi81
Отключить я имел в виду методом DisableControls.

Всего записей: 713 | Зарегистр. 31-03-2006 | Отправлено: 19:08 25-12-2009
asi81



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
volser
Не знал о такой функции. Спасибо за помощь - должно помочь по идее.

Всего записей: 86 | Зарегистр. 08-06-2009 | Отправлено: 20:12 25-12-2009
clear2121



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет ВСЕМ!
В программе получаю данные в HEX кодах. Например 80 12 или 82 54. Мне надо отобразить десятичные числа из этх HEX.
80 12 = 18, а 82 54 = 596.
Эти данные заносятся в переменную, которая объявляется как unsigned char Dur[2]; И я вижу их.
ПОМОГИТЕ!

Всего записей: 311 | Зарегистр. 07-04-2005 | Отправлено: 10:42 29-12-2009
Garrett

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
clear2121
unsigned char x = Dur[0] & 0x0F;
Dur[0] = Dur[1];
Dur[1] = x;
short i;
memcpy( &i, Dur, 2 );

Всего записей: 2736 | Зарегистр. 16-10-2003 | Отправлено: 11:13 29-12-2009 | Исправлено: Garrett, 11:25 29-12-2009
clear2121



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Garrett
СПАСИБИЩЕ!!!

Всего записей: 311 | Зарегистр. 07-04-2005 | Отправлено: 11:49 29-12-2009
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » FAQ по Borland C++ Builder


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru