Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

За 2004-03-26

Re: Delphi Базы данных

On Fri, Mar 26, 2004 at 01:44:15AM +0600, monah wrote:
> Да, две одинаковые с разными данными. Но, повторюсь, я вообше "боюсь" этих
> баз данных, т.к. не знаю с какой стороны к этому зверю подступться!
Тогда неплохо было бы приобрести книжку или хотя бы посмотреть в
интернете литературу по базам данных.
Вообще, в Делфи ничего сложного. Вешаешь на форму TDatabase и два
TQuery, связываешь их между собой и проделываешь описанные ранее
действия. Все.

   2004-03-26 23:24:23 (#112886)

сложный COM объект

Hello All!
возникла необходимость создания COM объекта для работы со
специальной базой данных. Соответственно предполагаются интерфейсы
типа IDataBase - общие функции базы (загрузить, сохранить, получить
интерфейс указанной таблицы и т.д., и ITable - функции работы с
таблицами (найти данные, получить данные, записать данные и т.д.).
создается класс, представляющий базу данных, и в качестве
интерфейса IDataBase возвращается указатель на объект этого класса.
А как быть с таблицами? На что возвращать указатели при запросе
интерфейса ITable? С ама база реализуется на интерфейсах MSXML 4.0.
Одновременно могут быть запрошены НЕСКОЛЬКО таблиц, но загружать все в
какие-то внутренние структуры не хочется - есть объект XMLDOMDocument
в котором уже все загружено... но не в виде таблиц!
может у кого есть какие-то мысли как лучше сделать?

   2004-03-26 19:47:23 (#112701)

Re[2]: (CMyObject ) a = (CMyObject *) b

Д>> Допустим есть:
Д>> CMyObject a, *b;
Д>> b = new CMyObject;
Д>> Как сделать что то типа (сам знаю что такое не работает, потому и говорю
что "типа")
Д>> delete (*)a;
Д>> a = *b;
Д>> А зато как бы было все замечательно...
Мудришь, однако. Было совсем непонятно, что тебе нужно в конечном
счете и что было бы замечательно.

БГ> Сформулируй вопрос
Д> Есть статическая переменная
Д> CMyObject a;
Д> есть указатель
Д> CMyObject *b = new CMyObject;
Д> приводим _a_ к указателю на ссылающемуся на область памяти объекта _а_
Д> удаляем _а_
Д> присвамиваем указателю _а_ содержимое _b_
Д> Ферштейн?
Ну и путаница. По пунктам.
1. если нужно получить адрес области памяти, используешь "&a".
2. delete используется для удаления объектов, память для
которых выделена new, само собой, передавать
delete адрес "a" неверно

Д> А надо что бы мы обращаясь к a, на самом деле обращались к b
Теперь попробую предположить, что ты хочешь. Если тебе нужно
завести одну переменную, которая могла бы хранить адрес
объектов, память для которых выделена динамически
или статически, возможно такое решение.
Заводишь в классе признак динамического выделения и делаешь
специальную функцию для освобождения объекта, которая
вызывает "delete this" для динамически
выделенных объектов:

CMyObject::CMyObject(int flag) { m_dyn = flag; }
void CMyObject::Free(void) { if(m_dyn) delete this; }

CMyObject a(0), *b, *x;
b = new CMyObject(1);
x = &a;
x->Work(); // что-то делаем...
x->Free(); // деструктор для a еще не вызван
x = b;
x->Work(); // что-то делаем...
x->Free(); // а вот динамический объект удаляется
...
// в конце области существования "a" вызовется деструктор для него

Если я опять тебя не понял, извини. Попробуй
выражать свои пожелания яснее.

--
Номер выпуска : 2709
Возраст листа : 186 (дней)
Количество подписчиков : 378
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/112467
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

   2004-03-26 14:38:44 (#112467)

Re[3]: (CMyObject ) a = (CMyObject *) b

Здравствуйте, Дедка.

БГ>> Сформулируй вопрос
Д> Есть статическая переменная
Д> CMyObject a;
Д> есть указатель
Д> CMyObject *b = new CMyObject;

Д> приводим _a_ к указателю на ссылающемуся на область памяти объекта _а_

Д> удаляем _а_

Д> присвамиваем указателю _а_ содержимое _b_

Д> Ферштейн?

Не уверен.

может быть можно так:
a = *(b);
b = &a;

Т.е. останется переменная статическая, а не динамическая :)

Из всего сказанного Вами мне не понятно, как Вы себе представляете
приведение "_a_ к указателю на ссылающемуся на область памяти объекта
_а_"???

Если я правильно все понимаю, подобная операция попытается привести
саму переменную _а_ к указателю ссылающемуся на область памяти объекта
_а_.

Говоря проще, _а_ не есть переменная, а лишь имя области в памяти.
Это имя существует в момент компиляции в пространстве имен, но не в
коде, который получится.

Ферштейн?

   Болюба Георгий 2004-03-26 10:14:29 (#112315)

Re: (CMyObject ) a = (CMyObject *) b

Здравствуйте, Дедка.

Вы писали 24 марта 2004 г., 10:27:34:

Д> ДОпустим есть:
Д> CMyObject a, *b;
Д> b = new CMyObject;
Д> Как сделать что то типа(сам знаю что такое не работает, потому и
Д> говорю что "типа")

Д> delete (*)a;
Д> a = *b;
Д> изврат, да?
Д> А зато как бы было все замечательно.......

Думаю, что ты не совсем понимаешь поведение компилятора при
компиляции подобных выражений.
Между статическими переменными и динамическими есть кординальное
различие:
Статические переменные создаються автоматически как только попадают в
область видимости (наприм. запускается функция её содержащая). Причём
создаёться такая переменная как правило в стеке. Удалять её нельзя.
Присваивать ей другие значения можно только копированием в неё данных.
Выражение delete (*)a Абсолютная бессмыслица. Объект а удалиться
только после выхода из зоны видимости, либо ты напишешь небезопасный
код на Асме. И, если ты удалишь всё таки её, то при выходе объекта из
зоны видимости (возврат из проццедуры содержащей a) произойдёт
исключение, связанное с тем, что стек будет меньше чем полагал
компилятор.
Выражение a = *b (утверждать не буду) но вроде сработает только если
переопределишь в классе CMyObject оператор =. Ведь тут необходимо
переместить все данные (физически) из области на которую указывает b в
переменную а (в стек).

А динамические переменные храняться в куче (спец. обл. памяти).

А вобще это делается с помощью двух указателей. Зачем там статическая
переменная?...

   2004-03-26 09:04:26 (#112278)

Re: Delphi Базы данных

> В смысле две одинаковых базы данных с разными данными? Если так, то все
> очень просто. Пишем простенькую программу, которая делает
> SELECT * FROM table1 и затем INSERT INTO table2 VALUES(...)
> Вместо ... все что вернется из запроса.
>
Да, две одинаковые с разными данными. Но, повторюсь, я вообше "боюсь" этих
баз данных, т.к. не знаю с какой стороны к этому зверю подступться!

С уважением monah
e-mail : janal***@n*****.ru
сайт : http:\\janalex.narod.ru
--
Номер выпуска : 2706
Возраст листа : 186 (дней)
Количество подписчиков : 378
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/112247
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

   2004-03-26 07:31:03 (#112247)