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

RusFAQ.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск 403
от 10.05.2006, 15:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 318, Экспертов: 42
В номере:Вопросов: 5, Ответов: 12


Вопрос 42068: Доброе время суток господа эксперты! Вот начал делать базу данных на IB в С++ Буилдере.. вот автоматически сгенерированный запрос для действия Insert insert into GLOBAL (NUM, NAME, G1SITY, G1STREET, G1DOM, G1KORP, G1OFFICE, G2SITY...
Вопрос 42075: Добрый день, тыкните пожалуйста на ошибку в коде. В строке " MDESKTOP(...){...; Windows=new MWINDOWS(...);}" появляется еррор: "Неизвестная структура MWINDOWS"....
Вопрос 42103: Здравствуйте. Есть структура: struct elem { int number; int * massive; int _error; }; и происходит например следущая инициализация: struct elem table[] = { {1, {10, 12}, 0}, {2, {50, 30, 60, 10}, 0}, {3, ...
Вопрос 42117: Помогите, кто может. Есть задача: написать программу пульта ДУ видеомагнитофона. Понятия не имею, с чего начать. Мож кто-нить подскажет....
Вопрос 42128: Помогите с преобразованием переменных(( Вообще-то у меня к вам несколько вопросов, в общем по порядку) 1) Имеется бд аксесовская, подключаюсь к ней с помощью DAO, объявляю переменную + записываю в нее значение из поля: COleVariant ti...

Вопрос 42.068
Доброе время суток господа эксперты!
Вот начал делать базу данных на IB в С++ Буилдере..
вот автоматически сгенерированный запрос для действия Insert
insert into GLOBAL
(NUM, NAME, G1SITY, G1STREET, G1DOM, G1KORP, G1OFFICE, G2SITY,
G2STREET, G2DOM, G2KORP, G2OFFICE, FIO)
values
(:NUM, :NAME, :G1SITY, :G1STREET, :G1DOM, :G1KORP, :G1OFFICE, :G2SITY, :G2STREET, :G2DOM, :G2KORP, :G2OFFICE, :FIO)
2 вопроса...
1) мне нужно чтобы поле NUM было автоикрементом
2) как подставлять в поле values значение edit'ов.. (edit'ы и БД находятся на разных формах)
подскажите ответы.
заранее благодарен
Отправлен: 04.05.2006, 17:17
Вопрос задал: Shcherbakov Anton (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Jeka911
Здравствуйте, Shcherbakov Anton!

Если в БД num настроен автоинкрементом, то достаточно поредавать пустую строку (или 0)...

А чтоб подставить значения -
String q = "INSERT INTO global (....) VALUES ("+Edit1->Text+","+Edit2->Text+"......);";


---------
Шахтер - чемпион!!!
Ответ отправил: Jeka911 (статус: 2-ой класс)
Ответ отправлен: 05.05.2006, 06:37

Отвечает: EPDSota
Здравствуйте, Shcherbakov Anton!

1. Чтобы поле стало автоинкрементым на уровне базы данных - выполни в ней 1 раз запрос (из любого SQL клиента): "ALTER TABLE GLOBAL CHANGE NUM NUM SMALLINT AUTO_INCREMENT"...
Поле станет автоинкрементным, но будет вызывать ошибки при явном добавлении в него значений...
---------
Открыть глаза навстречу солнцу
Ответ отправил: EPDSota (статус: Специалист)
Ответ отправлен: 05.05.2006, 10:43


Вопрос 42.075
Добрый день, тыкните пожалуйста на ошибку в коде.
В строке " MDESKTOP(...){...; Windows=new MWINDOWS(...);}"
появляется еррор: "Неизвестная структура MWINDOWS".

Приложение:

Отправлен: 04.05.2006, 19:21
Вопрос задал: Dadrum (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Morgion
ъДТБЧУФЧХКФЕ, Dadrum!
рПРТПВХК ТБЪДЕМЙФШ ПВЯСЧМЕОЙЕ УФТХЛФХТ У ТЕБМЙЪБГЙЕК- ЧУё РПМХЮЙФУС. йМЙ РПНЕОСК РПТСДПЛ ПРТЕДЕМЕОЙС УФТХЛФХТ. уН. РТЙМПЦЕОЙЕ. рПД VC7 ЛПНРЙМЙФУС.
дБ- ЕУМЙ ОЕ Ч ЛХТУЕ- ДМС УФТХЛФХТ ЮМЕОЩ РП ХНПМЮБОЙА public, ФБЛ ЮФП ЕУМЙ ЪБЛТЩФЩИ ЙМЙ ЮБУФОЩИ ОЕФХ, ФП public НПЦОП Й ОЕ РЙУБФШ.

Приложение:

Ответ отправил: Morgion (статус: Студент)
Ответ отправлен: 04.05.2006, 22:12
Оценка за ответ: 5
Комментарий оценки:
Спасибо, получилось.

Отвечает: Sergijj
Здравствуйте, Dadrum!

Дело в том, что MWINDOWS хоть и объявлена, но ещ не создана (компилятор не знает е размер), так как для того, чтобы е создать, ему нужна уже созданная (компилятор должен знать е размер) MDESKTOP. IMHO поэтому.

Выход, наверно, такой:
Опишите конструктор MDESKTOP вне тела класса (внутри класса только заголовок).

Удачи!
---------
Стучитесь! И Вас откопают...
Ответ отправил: Sergijj (статус: 3-ий класс)
Ответ отправлен: 05.05.2006, 09:15


Вопрос 42.103
Здравствуйте. Есть структура:
struct elem {
int number;
int * massive;
int _error;
};
и происходит например следущая инициализация:
struct elem table[] = {
{1, {10, 12}, 0},
{2, {50, 30, 60, 10}, 0},
{3, {4}, 0}
}
но так нельзя сделать, и приходится определять massive, например, как
int massive[4];
Можно ли как-нибудь придумать, чтобы под massive выделялось памяти столько сколько нужно?? Как, например, при инициализации:
char * name = "hello world!\n";
Отправлен: 05.05.2006, 08:24
Вопрос задал: Iluha (статус: 1-ый класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: RedDevil
Здравствуйте, Iluha!

int arr1 = {10,12};
int arr2 = {50,30,60,10};
int arr3 = {4};

struct elem table[] = {
{1, arr1, 0},
{2, arr2, 0},
{3, arr3, 0}
}

"Можно ли как-нибудь придумать, чтобы под massive выделялось памяти столько сколько нужно?? "
Можно, только это необходимо делать самому, т.е. вручную с помощью new выделять, и delete удалять. Или пользоватся векторами из STL.

---------
Есть 10 типов людей: те, кто знаком с двоичной системой, и те, кто нет.
Ответ отправил: RedDevil (статус: 10-ый класс)
Ответ отправлен: 05.05.2006, 09:01

Отвечает: Sergijj
Здравствуйте, Iluha!

Так подойдт?

elem::elem(unsigned num, unsigned massiveSize) : number(num), massive(0), _error(0) {
if (!(massive = new unsigned [massiveSize])) printf(" Error");
};// of constructor elem

Удачи!
---------
Стучитесь! И Вас откопают...
Ответ отправил: Sergijj (статус: 3-ий класс)
Ответ отправлен: 05.05.2006, 09:41

Отвечает: Ramok
Здравствуйте, Iluha!
К сожалению такого нельзя. Это называется flexible array member, и принято в стандарте C99, C++98 такого не потдерживает (только в качестве расширения некоторых компиляторов).
По стандарту C99 FAM имеет следующие ограничения:
* такая структура не может быть вложенной в другу структуру или находится в массиве (наш случай Ж:-(
* нельзя определить размер такого массива с помощью sizeof
* такой массив должен находится в конце структуры (gcc как дополнительное расширение позволяет такое например)

ссылки в тему:
http://david.tribble.com/text/cdiffs.htm#C99-fam
http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/topic/com.ibm.xlcpp8l.doc/language/ref/strct.htm#flexible
http://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html#C-Extensions

Приложение:

Ответ отправил: Ramok (статус: 1-ый класс)
Ответ отправлен: 05.05.2006, 15:21


Вопрос 42.117
Помогите, кто может. Есть задача: написать программу пульта ДУ видеомагнитофона. Понятия не имею, с чего начать. Мож кто-нить подскажет.
Отправлен: 05.05.2006, 10:06
Вопрос задал: Гузенко Руслан Николаевич (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: EPDSota
Здравствуйте, Гузенко Руслан Николаевич!

Прежде всего:
1. узнать на каком чипе(процессоре) изготовлен пульт (обычно самая большая или даже единственная микросхема - прочитать обозначение).
2. Узнать к каким выводам его подключены исполнительные устройства -инфракрасный излучатель и клавиатура (к каким ножкам микросхемы ведут дорожки от них).
3. Дальше дело техники - находишь Си от них и программируешь - при нажатии какой кнопки - что будет генерировать излучатель (или со стороны программы - по каким "входным" сигналам на ножках, какие будут сигналы на "выходных" ножках)...

---------
Открыть глаза навстречу солнцу
Ответ отправил: EPDSota (статус: Специалист)
Ответ отправлен: 05.05.2006, 11:24

Отвечает: Решетник Д
Здравствуйте, Гузенко Руслан Николаевич!
как вариант, если есть рабочий пульт:
есть пограммка WinLIRC (opensource C++) для управления ПК с помощью ДУ.
Можно с ее помощью изучить входящий сигнал рабочего пульта, запомнить его и генерировать на УЖЕ собранный рабочий передатчик.

у ДУ не очень сложная схема. нужно только выбрать правильный передатчик (на Вашем рабочем пульте должна быть написана марка пульта. например, RC-5). Берете этот номер и спрашиваете на радиорынке запчасти для него.
---------
Жизнь коротка, чтобы писать на ассемблере
Ответ отправил: Решетник Д (статус: 5-ый класс)
Ответ отправлен: 05.05.2006, 13:10

Отвечает: Ramok
Здравствуйте, Гузенко Руслан Николаевич!
1) нужно выяснить тип контроллера используемого в вашем ДУ
2) найти в интернете ресурсы посвященные этому контроллеру
понадобится как минимум:
a) среда программирования для этого контроллера (компилятор, компановщик, может быть какое то IDE, эмулятор, отладчик)
b) tarter kit (или еще называется evaluation board), что являет собой программатор для контроллера, внешние устройства для отладки и программирования, кабеля..
зачастую в контроллер уже есть встроенный программатор поэтому можно будет обойтись кабелем который подключается например к LPT

все это общее понятия, более конктрено можно сказать только в зависимости от типа контроллера
Ответ отправил: Ramok (статус: 1-ый класс)
Ответ отправлен: 05.05.2006, 15:36

Отвечает: Sergijj
Здравствуйте, Гузенко Руслан Николаевич!

Любая программа, которая _реально_ что-то делает, начинается с обзора ресурсов.
В данном случае я бы Вам посоветовал сначала посмотреть документацию на подопытную платформу, на интерфейс пульта, на программные средства, которые придтся использовать (хотя бы по-диагонали), а потом уже задать более конкретные вопросы, т.е. когда в голове сложится более-менее стройная система представлений об программируемом объекте.

Вышеупомянутую документацию можно отыскать в интернете или попросить у производителя.

Удачи!
---------
Стучитесь! И Вас откопают...
Ответ отправил: Sergijj (статус: 3-ий класс)
Ответ отправлен: 05.05.2006, 18:34


Вопрос 42.128
Помогите с преобразованием переменных((
Вообще-то у меня к вам несколько вопросов, в общем по порядку)

1) Имеется бд аксесовская, подключаюсь к ней с помощью DAO, объявляю переменную + записываю в нее значение из поля:
COleVariant timeZ;
cr.GetFieldValue(_T("TIME"), timeZ);

в поле бд TIME хранятся разные цифирки
и вопрос - как преобразовать переменную timeZ к типу int? Нужно для всяких там математических действий)

2) Та же самая бд что и в первом вопросе, строение у нее такое:

Field1 Field2 Field3
x y z
x1 y1 z1
x2 y2 z2

Алгоритм такой - нахожу значение в Field1, допустим нашлелся x2, как перепрыгнуть на Field2 и Field3 и взять значения y2 и z2 соответственно? А то я знаю только как прыгать по столбцу через MoveNext(), но не знаю как прыгать по строчкам(

3) в БД в одной ячейке типа data/time время записано в таком формате xx:yy:zz. Как мне взять и вытащить из этой строчки для разных переменных часы, минуты, секунды? А то получается, что в одну переменную записывается все ячейка сразу(

Пока все. Помогите плз
Отправлен: 05.05.2006, 11:59
Вопрос задала: SandraK (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Raptor1
Здравствуйте, SandraK!
2)
Если класс БД это CDAORecordset, то наверное он похож на CRecordset, и в нем есть переменная для каждого поля базы данных и при вызове Move функций в эти переменные записываются значения полей текущей строки БД.
Ответ отправил: Raptor1 (статус: Студент)
Ответ отправлен: 05.05.2006, 23:26


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


ї 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права Реклама на портале
Версия системы: 4.32 от 03.05.2006
Яндекс Rambler's Top100

В избранное