Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

(Часть 1) (*Закрыта*)Я начинающий, подскажите пожалуйста, как...

1
11 ноября 2005 года
kot_
7.3K / / 20.01.2000
Уважаемый ALL!
Если вы только начинаете осваивать среду разработки ВСВ - предлагаю возникающие вопросы размещать в данной теме. Не создавайте пожалуста отдельные темы - типа "Как мне запустить свое приложение на другом компьютере", "Как перевести String в char*" и тому подобное. Такие темы будут закрываться с отсылку в эту. Не обижайтесь.
Кроме того, не брезгуйте плиз, пользоваться поиском хотя бы, по нескольким критериям. Иногда бывает так, вопрос который возник у вас не столь оригинален - вполне возможно, кто то уже спрашивал его до вас :) Поверьте, отвечать на одни и теже вопросы тоже не всегда интересно.
Если вы задаете свой вопрос на форуме - что бы получить наиболее эффективный ответ - следуйте пожалуйста несложным правилам. Они просты:
0. Опишите чего вы хотели добиться.
1. Опишите ошибку которая у вас возникла, по возможности с текстом самой ошибки.
2. Если вы считаете это необходимым - приведите фрагмент(пожалуста не помещайте в свой вопрос весь листинг) кода, на который жалуется компилятор, коротко описав переменные которые используются, и как они инициализируются. Исходники высылайте или выкладывайте только в том случае, если вас об этом просят.
3. Если проблема связана с функцией какой либо библиотеки - не стесняйтесь залезть в хелп и найти там ее описание. То чтовы не рубите в английском, зато читаете Рабле в оригинале - отнюдь не оправдание. Людей для которых английский - родной, здесь немного. Пользуйтесь словарем, это дает результаты :)
4. Не забывайте - может быть ВСВ и имеет раширения по сравнению со стандартом - но тем не менее это С++. Не забывайте проверить, что в ваш проект подключены все необходимые заголовочные файлы, а так же файлы библиотек.
5. Если вы задали вопрос один раз - не нужно его повторять или дублировать, или размещать посты типа "Ну что никто не знает" и т.д. Вы рискуете узнать много разных путей, но так и не получить нужный вам ответ.
6. Форум - дело сугубо добровольное. Здесь ни кто НЕ ОБЯЗАН искать ответы на ваши вопросы. Если вам отвечают - то это только исключительно из любви к вам. :)
7. Исходя из выше сказанного, если вам не отвечают - ну возможно вас не любят :)
8. Для тех, кому нужно написать курсовую, программу, решить контрольную или тому подобное - существует раздел форума Студентам
Размещайте, плиз, свои посты там. Сообщения размещенные в данной теме - не будут перемещаться - они будут удаляться.
9. Если вы хотите пообщаться, обсудить тему, не связанную с ВСВ - милости просим: В "Отдохнем". Флуд в данном разделе не приветствуется.
Ну вроде все. Если что забыл - или не так - поправьте.
Удачи.

1020 ответов / показаны 961 - 999

Страницы:
21K
19 ноября 2007 года
Slava19rus
4 / / 13.09.2006
сам я не местный, вся деревня болел, я болел, прапрабабушка лежит с температурой 36.6
мне нужно, чтобы мое приложение 1 запускало другое 2 с определенными параметрами, затем ждала, пока приложение 2 отработает, закрывала его и открывало его же с другими параметрами и так сколько угодно долго, т.к. параметров этих может быть очень много.. я все сделал следующим образом -
Код:
if (exec)
 {
  AnsiString path="";
  char ch[25];
  int acc[]={
  76412,
  593015,
  598100,
  80498,
  93385,
  58048,
  1051045
  };
  for (int i=0; i<ARRAYSIZE(acc); i++)
  {
   itoa(acc, ch, 10);
   acc1 = path+ch+" Default";
   f = acc;
   char *acco = acc1.c_str();
   ShellExecute(NULL, "open", "F:\\mon\\app.exe ", acco, NULL, SW_MINIMIZE);
   Form2->ShowModal();
   DeleteFile("f:\\mon\\app\\files\\ok.txt");
   if (!EnumWindows((WNDENUMPROC) printWindowTitle, NULL));
  }
}

BOOL CALLBACK close_app(HWND hwnd, LPARAM lParam)
{
        char s[100];
        GetWindowText(hwnd, s, sizeof(s));
        if (!AnsiContainsStr(s, f+": WCF")) return true;
        else
        {
         //ShowMessage("&#206;&#234;&#237;&#238; &#237;&#224;&#233;&#228;&#229;&#237;&#238;");
         PostMessage(hwnd, WM_CLOSE, 0, 0);
         return false;
        }

}


форма 2 TTimer-ом каждую секунду проверяет, записало ли app.exe файл ok.txt - если да, самоликвидируется (Form2->Close()), и я так понимаю управление возвращается в первую форму..

но вот незадача - где-то есть ошибка, а где - понять я не в силах.
бывает так, что app.exe еще не записало файл, а управление уже вернулось в первое окно, программа 2 закрылась не отработав и уже app.exe запускается со следующими параметрами...

помогите кто чем может, я уже не знаю что делать.. я только учусь
21K
19 ноября 2007 года
Slava19rus
4 / / 13.09.2006
вроде бы разобрался.. оказывается когда открываешь модально другую форму - в той форме, которая ее открыла - таймер продолжает щелкать..
246
20 ноября 2007 года
GIZMO
1.8K / / 30.07.2004
Цитата: Slava19rus
вроде бы разобрался.. оказывается когда открываешь модально другую форму - в той форме, которая ее открыла - таймер продолжает щелкать..


нафига эта чума с формами и т.д. CreateProcess и WaitForSingleObject

30K
24 ноября 2007 года
Filomat
8 / / 15.10.2007
На форме объекты Image1, Image2 и т.д.
как к ним обращаться из цикла перебором?

и как создавать свои объекты динамически? На примере того же Image
1
24 ноября 2007 года
kot_
7.3K / / 20.01.2000
 
Код:
for(int i = 0;i<Form1->ComponentCount;i++){

   if(Form1->Components->ClassNameIs("TImage")){
    ShowMessage(Components->Name);
   }
 }

по вопросу динамического создания компонентов на форме используйте поиск. вопрос обсуждался неоднократно.
30K
24 ноября 2007 года
Filomat
8 / / 15.10.2007
А как при этом обратиться к свойству Picture компонента Image, если я его нахожу при помощи Components ?

нашел :)
TImage* pic = dynamic_cast<TImage *>(Components);
30K
27 ноября 2007 года
favoritefx
12 / / 07.11.2007
Господа, как и во всяком деле, в программировании приложений баз данных есть много подводных камней ,не описанных в простых книжках и не сказанные в курсах студенческих лекций.
Одно дело - простейшие студенческие приложения и совсем другое - реально эксплатируемая клиент-серверная программа с большой базой данных и кучей требований к безопасности.

Расскажите пожалуйста, как надо правильно проектировать приложение, чтобы оно долго и без сбоев работало, какие компоненты лучше использовать, чтобы не возникало сбоев.

Мой вариант - доступ к таблицам SQL сервера через ADOTable, составным таблицам через ADOQuery и навигация всего этого DBNavigatorom столкнулся с кучей препятствий.

Первая проблема. решилась очень просто.

Сейчас возникают другие - проблемы с удалением записей и даже с внесением в базу. Как сказал один из участников форума, проблема на самом деле в прокладке между стулом и компьютером, но все же, раз это ветка для начинающих, то думаю вопрос правильного проектирования и правильного использования компонентов (или использование правильных компонентов) - вопрос очень полезный.
246
27 ноября 2007 года
GIZMO
1.8K / / 30.07.2004
Цитата: favoritefx

Расскажите пожалуйста, как надо правильно проектировать приложение, чтобы оно долго и без сбоев работало, какие компоненты лучше использовать, чтобы не возникало сбоев.


Не-а не расскажут;) Слишком объемная тема для одной ветки. Отправят читать книжки. Как не специалист по БД (и в программировании вообще) могу посоветовать Елманову "Borland C++ Builder. Архитектура \"клиент-сервер\", многозвенные системы, Internet-приложения" Для начало самое-то, кратко рассмотрены: терминология, процесс проектирования, создания и оптимизации серверных БД. Компоненты какие, зачем и где используются. Трехзвенные системы. Не знаю кому как, но я понял (или мне так кажется:)). Дальше пойдешь более углубленно копать есть куча статей посвященных тому или иному вопросу связанному с разработкой клиент-серверных БД.

Цитата: favoritefx

Мой вариант - доступ к таблицам SQL сервера через ADOTable, составным таблицам через ADOQuery
...
правильного проектирования и правильного использования компонентов (или использование правильных компонентов) - вопрос очень полезный.


ADO, ИМХО, отстой полный! Хотя в силу своей не компетентности настаивать не буду.

Правильными считаю InterBase, IBX
ibaseRu

1
27 ноября 2007 года
kot_
7.3K / / 20.01.2000
Цитата: favoritefx
Господа, как и во всяком деле, в программировании приложений баз данных есть много подводных камней ,не описанных в простых книжках и не сказанные в курсах студенческих лекций.
Одно дело - простейшие студенческие приложения и совсем другое - реально эксплатируемая клиент-серверная программа с большой базой данных и кучей требований к безопасности.

Расскажите пожалуйста, как надо правильно проектировать приложение, чтобы оно долго и без сбоев работало, какие компоненты лучше использовать, чтобы не возникало сбоев.

Мой вариант - доступ к таблицам SQL сервера через ADOTable, составным таблицам через ADOQuery и навигация всего этого DBNavigatorom столкнулся с кучей препятствий.

Первая проблема. решилась очень просто.

Сейчас возникают другие - проблемы с удалением записей и даже с внесением в базу. Как сказал один из участников форума, проблема на самом деле в прокладке между стулом и компьютером, но все же, раз это ветка для начинающих, то думаю вопрос правильного проектирования и правильного использования компонентов (или использование правильных компонентов) - вопрос очень полезный.


Как правильно сказано уже - тема черезмерно обширна. Одно могу сказать точно - использование компонентов ADOTable и DBNavigator - это уровень максимум студенческой проги причем достаточно низкого уровня. Для реальной работы как правило имеет смысл использовать (опять же все зависит от задач и объема, чисто ИМХО) примерно такую схему - TADOConnection, TADOStoredProc, TDataSetProvider, TClientDataSet. Этот подход позволяет обеспечивать надежность, расширяемость системы и проверен неоднократно на системах с количеством рабочих мест свыше 100. Основная концепция - прямая работа с таблицами - это как правило, ОШИБКА ПРОЕКТИРОВАНИЯ. ИМХО. На больших БД любая работа должна строится через хранимые процедуры - это позволит обеспечить определенный уровень независимости БДА от пользователей и программистов. Ну и так далее. Читайте хотябы Хендерсона. Описать это в форуме - задача безнадежная.

30K
28 ноября 2007 года
favoritefx
12 / / 07.11.2007
Скачал Хендерсона, читаю главу посвященную БД.
Читая форумы понял, что использование стандартных компонентов Table, Navigator и т.д. есть абсолютное зло в сложных программах.
Начал переписывать навигацию и столкнулся с проблемой.
Удаление записи из таблицы:

ADOCommand1->CommandType=cmdText;
ADOCommand1->CommandText="Delete From contacts where id=" + Form1->QueryContacts->DataSet->Fields->Fields[0]->AsString;
ADOCommand1->Execute();

После удаления одной записи можно удалять записи дальше, но стоит попытаться внести другую запись, как возникает ошибка:

"источник данных изменил или удалил значение ключа данной строки в хранилище данных".

Потом говорится, что удалена и локальная строка.
И только потом запись вставляется.

DataModule2->contacts->Close();
DataModule2->contacts->Open();

При переоткрытии DataSourse все работает без ошибок, но я уверен, что есть более гуманные средства устранения проблемы. Подскажите пожалуйста.

Насчет предложенных компонентов:
DataSetProvider используется вместо DataSource? В чем преимущество?

Для чего нужен ClientDataSet?

Если несложно подсказать, где можно посмотреть какой-нибудь ГРАМОТНЫЙ пример реализации приложения для базы данных?
1
29 ноября 2007 года
kot_
7.3K / / 20.01.2000
Цитата: favoritefx
Скачал Хендерсона, читаю главу посвященную БД.
Читая форумы понял, что использование стандартных компонентов Table, Navigator и т.д. есть абсолютное зло в сложных программах.
Начал переписывать навигацию и столкнулся с проблемой.
Удаление записи из таблицы:

ADOCommand1->CommandType=cmdText;
ADOCommand1->CommandText="Delete From contacts where id=" + Form1->QueryContacts->DataSet->Fields->Fields[0]->AsString;
ADOCommand1->Execute();

После удаления одной записи можно удалять записи дальше, но стоит попытаться внести другую запись, как возникает ошибка:

"источник данных изменил или удалил значение ключа данной строки в хранилище данных".

Потом говорится, что удалена и локальная строка.
И только потом запись вставляется.

DataModule2->contacts->Close();
DataModule2->contacts->Open();

При переоткрытии DataSourse все работает без ошибок, но я уверен, что есть более гуманные средства устранения проблемы. Подскажите пожалуйста.

Насчет предложенных компонентов:
DataSetProvider используется вместо DataSource? В чем преимущество?

Для чего нужен ClientDataSet?

Если несложно подсказать, где можно посмотреть какой-нибудь ГРАМОТНЫЙ пример реализации приложения для базы данных?


Грамотный пример реализации зависит от конкретной ситуации. Я рекомендую любую законченную операцию выносить в отдельную длл. Здорово упрощает жизнь и переносимость кода. На собственно приложение оставлять минимум базовых функций - все остальные вызовы делать через длл. Кроме того, как правило каждая длл реализует свое подключение к базе - но здесь еще все зависит от условий, я честно говоря так и не разобрался - возможно ли в таком случае превышение количества подключений, больше чем по лицензии. По крайней мере, в моей ситуации, при лицензии на сервак в 50 подключений случаев отбоя по данной причине не было, если конечно количество пользователей не превышало это число, не смотря на то что каждый из них запускал как минимум 2 подключения на сервер. Возможно здесь сыграло еще рольто что подключение устанавливалось по требованию а не висело постоянно.
DataSetProvider - как и ClientDataSet лично я использую для явного разделения источника данных и представления данных. На стороне ClientDataSet производятся все операции типа фильтрации сортировки и пр, того что выливается клиенту. Через него же выгружаются данные в контролы. Преимущество данной схемы в том что, позволяет обеспечить относительную независимость от постоянного соединения с базой, возможность локальной работы с данными, относительную универсальность интерфейса - по сути при переходе на трехзвенку клиентское приложение практически не требует доработки. Недостатки - небольшое падение производительности - при прямом доступе как правило процентов на 15-20 быстрее. Но при разрыве связи с серваком - при прямой работе с компонентами как правило пользователь сразу теряет данные - в моей схеме данные могут быть сохранены локально и затем синхронизированы, если это конечно нужно.
Для вставки, модификации, выборки и удаления данных я всегда использую ХП - по моему опыту это себя оправдывает. Прямой доступ к таблицам это всегда гемор, даже если ты един в лице как программиста так и БДА - а если работаешь в команде - это быстро приводит к толстой северной лисичке - когда в середине проекта когда отработано несколько тысяч строк кода и по ряду причин приходится менять структуру базы - а менять ее приходится так или иначе как минимум раз в полгода. Соответственно структура базы должна быть спроектирована так, что бы при внесении новых сущностей требовалось минимум модификаций существующей структуры, и старая версия программы могла работать на новой базе.
Переоткрытие набора данных естественно необходимо - но при использовании того же ClientDataSet - можно вызвать метод Refresh() - что существенно снижает траффик в сети - одно дело полностью обновлять набор данных - другое - просто его синхронизировать.
Компоненты представления (гриды и прочее) связываются с набором данных через стандартный DataSource - тут ничего не меняется. Только завязывается он не на компоненты ADO - а на ClientDataSet.

30K
29 ноября 2007 года
favoritefx
12 / / 07.11.2007
Небольшой вопрос, а в DataSetProvider через что лучше данные передавать?
Тоже через ХП?
1
29 ноября 2007 года
kot_
7.3K / / 20.01.2000
Цитата: favoritefx
Небольшой вопрос, а в DataSetProvider через что лучше данные передавать?
Тоже через ХП?


Да. DataSetProvider должен быть связан с комопнентом TADOStoredProc. Если ты конечно используешь ХП. Если нет - то с тем компонентом, который получает данные данные из базы (TADOQuery, TADODataSet).
По сути DataSetProvider - это интерфейс который тебе позволяет обращаться к компонентам не напрямую а опосредованно. Это как раз и позволяет реализовать определенную гибкость доступа - на стороне клиента абсолютно безразлично что конкретно использовано.

30K
30 ноября 2007 года
favoritefx
12 / / 07.11.2007
Перестроил всю архитектуру приложения.
Данные получаются по рекомендованной цепочке:
ХП-DataSetProvider-ClientDataSet-контролы

Но теперь ничего не могу добавлять и модифицировать в главной таблице с 50 полями.
Работу с вспомогательными таблицами я уже перестроил на ХП.

Но вот с модификацией и добавлением данных в главную таблицу через контролы ничего не работает :(

Какова должна быть правильная последовательность действий?
Я делаю примерно так:

DataModule2->ClientMain->ApplyUpdates(-1);
DataModule2->ClientMain->Refresh();

после внесения изменений.
В результате:
Unable to resorv records. Table name not found.

Как нужно правильно вносить изменения в БД и новые записи при такой архитектуре.
25K
04 декабря 2007 года
San_
42 / / 03.10.2007
всем превед.
вопрос
имеем вот такой класс :
 
Код:
class lamp:public base{
    protected:
        bool on_;

    public:
        lamp(AnsiString index, AnsiString image, AnsiString backg, int l, int t);
        ~lamp();
                __property bool on = {read = on_, write = set_on};
};


и один из конструкторов:
 
Код:
lamp :: lamp(AnsiString in, AnsiString im, AnsiString backg, int l, int t):
         base(index,image,backg,l,t), [SIZE="4"]on(1)[/SIZE]{};



в конструкторе косяк - обращение не к данным а к свойству (on)

почему Builder эту вещь пропускает, или это какая то новая фича языка ?
у свойств, насколько я знаю нет конструкторов
1
04 декабря 2007 года
kot_
7.3K / / 20.01.2000
Цитата: favoritefx
Перестроил всю архитектуру приложения.
Данные получаются по рекомендованной цепочке:
ХП-DataSetProvider-ClientDataSet-контролы

Но теперь ничего не могу добавлять и модифицировать в главной таблице с 50 полями.
Работу с вспомогательными таблицами я уже перестроил на ХП.

Но вот с модификацией и добавлением данных в главную таблицу через контролы ничего не работает :(

Какова должна быть правильная последовательность действий?
Я делаю примерно так:

DataModule2->ClientMain->ApplyUpdates(-1);
DataModule2->ClientMain->Refresh();

после внесения изменений.
В результате:
Unable to resorv records. Table name not found.

Как нужно правильно вносить изменения в БД и новые записи при такой архитектуре.


Используя свойства компонента TClientDataSet - BeforeClose & AfterClose. Можно просто передавать данные ХП.

246
04 декабря 2007 года
GIZMO
1.8K / / 30.07.2004
Цитата: San_
в конструкторе косяк - обращение не к данным а к свойству (on)

почему Builder эту вещь пропускает, или это какая то новая фича языка ?
у свойств, насколько я знаю нет конструкторов


херню написал потому что

 
Код:
lamp :: lamp(AnsiString in, AnsiString im, AnsiString backg, int l, int t):
         base(index,image,backg,l,t), [SIZE="4"]on_(1)[/SIZE]{};
25K
06 декабря 2007 года
San_
42 / / 03.10.2007
Цитата: GIZMO
херню написал потому что



ну так понятно херню.
фишка в том что если я случайно напишу такую херню , то отловить ее потом сложно , так как компилятор не видит ничего криминального, а вот программа с такой "ошибкой" такие заскоки демонстрирует что даже бывалые руками разводят.

вот я собственно и спросил почему такая конструкция не вызывает сообщений типа - ошибка мля ;), ну или хотя бы предупреждение

246
06 декабря 2007 года
GIZMO
1.8K / / 30.07.2004
Цитата: San_
ну так понятно херню.
фишка в том что если я случайно напишу такую херню , то отловить ее потом сложно...


А ты не пиши. Никогда не обращайся к св-ву из методов класса, только к полю, которое представляет это св-во.

12K
06 декабря 2007 года
Sholah_Weras
99 / / 04.12.2007
Доброго времени суток!
Пару вопросов:
1. Скомпилировал exe'шник. Пользую в ней БД и манифест ХР. Скопировал на флэшку - а на других компах не запускается. Говорит, что не найден файл vcl60.bpl. Как можно сделать независимость программы от этого (и подобных) файлов?
2. Вопрос по БД. Есть колонны с определенными именами. Есть пару листбоксов, по которым составляю имя колонны (т.е. выбираю варианты и склеиваю их). Теперь вопрос - как мне найти по этой "склейке" нужный столбец? Т.е. как перебрать названия столбцов?
3. Вытекает из 2. Будет такая ситуация, что склейка не даст полного имени столбца.
Например. Склейка = "Столбец"
А сама таблица:
Столбец 1 | Столбец H | Столбец 1ыа34
Но надо, чтобы в таблице отобразились эти столбцы. Как сделать?
1
06 декабря 2007 года
kot_
7.3K / / 20.01.2000
Цитата: Sholah_Weras
Доброго времени суток!
Пару вопросов:
1. Скомпилировал exe'шник. Пользую в ней БД и манифест ХР. Скопировал на флэшку - а на других компах не запускается. Говорит, что не найден файл vcl60.bpl. Как можно сделать независимость программы от этого (и подобных) файлов?


Для кого сделан раздел наиболее часто задаваемых вопросов(ФАК)?

Цитата: Sholah_Weras

2. Вопрос по БД. Есть колонны с определенными именами. Есть пару листбоксов, по которым составляю имя колонны (т.е. выбираю варианты и склеиваю их). Теперь вопрос - как мне найти по этой "склейке" нужный столбец? Т.е. как перебрать названия столбцов?
3. Вытекает из 2. Будет такая ситуация, что склейка не даст полного имени столбца.
Например. Склейка = "Столбец"
А сама таблица:
Столбец 1 | Столбец H | Столбец 1ыа34
Но надо, чтобы в таблице отобразились эти столбцы. Как сделать?


Что такое "колонны", зачем их надо "склеивать", причем здесь БД, и каким образом может возникнуть " такая ситуация, что склейка не даст полного имени столбца. ", и каким образом эта ситуация вытекает из вашего второго вопроса?
Сформулируйте вопрос, а не поток сознания. Если вы не знаете как это правильно описать - коротко поясните вашу задачу и что вы хотите сделать. Возможно вы решаете задачу мягко говоря не через то отверстие, которое для этого предназначено.

12K
07 декабря 2007 года
Sholah_Weras
99 / / 04.12.2007
Хорошо, пойду по пути объяснения задачи.
Пользователь из нескольких слов нескольких листбоксов собирает имя столбца в БД. Нажимает "ок" и в таблице отображается этот столбец. Пример: (LB=ListBox)
LB1| LB2 | LB3
1 | q | qw1
2 | a | as2
3 | z | zx3

Пользователь собрал 3+a+zx3. Осуществляем поиск - есть ли столбец с таким названием в БД "3azx3" Нашли несколько стобцов с именами:
3azx3MF
3azx3ZK
Надо показать эти столбцы в DBGrid
1
07 декабря 2007 года
kot_
7.3K / / 20.01.2000
Цитата: Sholah_Weras
Хорошо, пойду по пути объяснения задачи.


Ну спасибо. уважили. Просто до конца жизни должен буду.

Цитата: Sholah_Weras

Пользователь из нескольких слов нескольких листбоксов собирает имя столбца в БД. Нажимает "ок" и в таблице отображается этот столбец. Пример: (LB=ListBox)
LB1| LB2 | LB3
1 | q | qw1
2 | a | as2
3 | z | zx3

Пользователь собрал 3+a+zx3. Осуществляем поиск - есть ли столбец с таким названием в БД "3azx3" Нашли несколько стобцов с именами:
3azx3MF
3azx3ZK


Вы что действительно уверены, что делаете одолжение всем, задав вопрос?
С вас вашу же задачу клещами вытягивать надо? Какая БД? Какие компоненты используются? Где вы эти столбцы ищете (или собираетесь искать)? Откуда взяты:
3azx3MF
3azx3ZK?
Если вы эти столбцы "нашли" - то что мешает выполнить запрос в базу и получить данные?

 
Код:
ADOQuery1->Active = false;
String SQL = "select 3azx3MF,3azx3ZK from sometable";
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add(SQL);
ADOQuery1->Active = true;
DataSourse1->DataSet = ADOQuery1;


Цитата: Sholah_Weras

Надо показать эти столбцы в DBGrid


 
Код:
DBGrid1->DataSourse = DataSourse1;
9.5K
07 декабря 2007 года
leahov
54 / / 09.12.2005
добрый день, подскажите как исправить ошибку в коде
Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include<math.h>

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
float f(float x)
{
//    return x*x*x + 3*x - 2;
 return x*x*x + x - 5;
}
float fdx(float x)
{//    return 3*x*x +3;
  return 3*x*x +1;
}
float fd2x(float x)
{
    return 4*x;
}
//---------------------------------------------------------------------------

void TForm1::modinewton(float x0, float x1, float epsilon, int step)
{
        if (abs(x1-x0) > epsilon)

         {
           ListBox2->Items->Add("x: "+FloatToStr(x1));
           ListBox2->Items->Add("f(x): "+FloatToStr(f(x1)));
           ListBox2->Items->Add("steps: "+IntToStr(step));
           return;
         }
         const float xc = fdx(x0);
         float x1 = x0 - f(x0)/xc;


         modinewton(x0, x1, epsilon, step + 1);

}

void __fastcall TForm1::bExe2Click(TObject *Sender)
{
  float a = StrToFloat(Edit1->Text);
  float b = StrToFloat(Edit2->Text);
  float epsilon = StrToFloat(Edit3->Text);

  if(f(a)*f(b) < 0)
  {
    ListBox2->Items->Add("данные неверны");
    return;
  }
  else
  {
   float x0 = a;
    if(f(a)*fd2x(a) < 0)
    {
     x0 = b;
    }

    ListBox2->Items->Add("===================================");
    modinewton(x0, x1, epsilon, 1);
    ListBox2->Items->Add("===================================");
    ListBox2->Items->Add("");
  }

}
//---------------------------------------------------------------------------


выдает ошибки:
[C++ Error] Unit1.cpp(101): E2238 Multiple declaration for 'x1'
[C++ Error] Unit1.cpp(128): E2451 Undefined symbol 'x1'
11
07 декабря 2007 года
oxotnik333
2.9K / / 03.08.2007
float x1 = x0 - f(x0)/xc;
заменить на
x1 = x0 - f(x0)/xc;
9.5K
07 декабря 2007 года
leahov
54 / / 09.12.2005
oxotnik333 да спасибо помогло, а с этим что делать?
[C++ Error] Unit1.cpp(128): E2451 Undefined symbol 'x1'
11
07 декабря 2007 года
oxotnik333
2.9K / / 03.08.2007
в какой строке то?

если в этой: modinewton(x0, x1, epsilon, 1);
тогда надо определить ее в классе TForm1
 
Код:
class TForm1: public TForm
{
private:
    float x1;

}


тогда она у тебя будет видна для всех объектов TForm1
9.5K
07 декабря 2007 года
leahov
54 / / 09.12.2005
спасибо oxotnik333 запустилось, но не считает, что бы не писал результат x=0 , f(x) = -5
11
07 декабря 2007 года
oxotnik333
2.9K / / 03.08.2007
потому что она (х1) равна нулю, прежде чем ее использовать, необходимо туда значение какое то поместить
12K
07 декабря 2007 года
Sholah_Weras
99 / / 04.12.2007
Цитата:
Ну спасибо. уважили. Просто до конца жизни должен буду.


Простите великодушно, не правильно выразился.

Цитата:

Откуда взяты:
3azx3MF
3azx3ZK?


Такие столбцы есть в таблице БД. Так, еще более наглядный пример:

Курс: Специальность: Семестр:
1_____A_____________1
2_____B_____________2
3_____C
4_____D
5_____E

(простите за эти полосы, не знаю как в форуме таблицу сделать)

Пользователь щелкая по ListBox'ам выбирает: "1А1". В таблице БД есть столбцы:

1 курс Специальность А Семестр 1 Группа А-1
1 курс Специальность А Семестр 1 Группа А-2
1 курс Специальность А Семестр 1 Группа А-3

Руками модифицируем "1А1" в "1 курс Специальность А Семестр 1" (хотя Вы писали, что иметь рускоязычные элементы в БД - чревато. Но пока оставлю так).
Далее. Как видим, есть несколько столбцов, содержащих подстроку
"1 курс Специальность А Семестр 1". Их и нужно отобразить.

Цитата:

Если вы эти столбцы "нашли" ...



В том то и дело, что я не знаю как их найти. А с SQL-запросами я не знаком.

9.5K
07 декабря 2007 года
leahov
54 / / 09.12.2005
не понял немного, как сделать? x0=x1?
11
07 декабря 2007 года
oxotnik333
2.9K / / 03.08.2007
x0, x1, epsilon - аргументы ф-ции modinewton
если ты задаешь значения для epsilon = StrToFloat(Edit3->Text);
float x0 = a;
то почему не задаешь значение для х1 ?

(это если не вдаваясь в математику, тут я забыл все на корню)
9.5K
07 декабря 2007 года
leahov
54 / / 09.12.2005
oxotnik333 да вижу, тут как раз надо думать насчет математики, буду думать
1
07 декабря 2007 года
kot_
7.3K / / 20.01.2000
Цитата: Sholah_Weras
Простите великодушно, не правильно выразился.

Такие столбцы есть в таблице БД. Так, еще более наглядный пример:

Курс: Специальность: Семестр:
1_____A_____________1
2_____B_____________2
3_____C
4_____D
5_____E

(простите за эти полосы, не знаю как в форуме таблицу сделать)

Пользователь щелкая по ListBox'ам выбирает: "1А1". В таблице БД есть столбцы:

1 курс Специальность А Семестр 1 Группа А-1
1 курс Специальность А Семестр 1 Группа А-2
1 курс Специальность А Семестр 1 Группа А-3

Руками модифицируем "1А1" в "1 курс Специальность А Семестр 1" (хотя Вы писали, что иметь рускоязычные элементы в БД - чревато. Но пока оставлю так).
Далее. Как видим, есть несколько столбцов, содержащих подстроку
"1 курс Специальность А Семестр 1". Их и нужно отобразить.



В том то и дело, что я не знаю как их найти. А с SQL-запросами я не знаком.



Ну это уже более по делу. Правда какая база все равно не понятно.
Если сказать по человечески - вам необходимо получить запись которая соответствует определенным условиям? Если я правильно понял конечно.
Я не буду вдаваться в подробности как установить соединение с БД, и предполагаю что курс, специальность, семестр и группа хранятся в базе в таком же виде как и в листбоксах. Если нет - то одно из двух - либо в базе поменять либо в листбоксах - на усмотрение

Код:
String SQL = "Select * from table ";
if(LB1->ItemIndex >=0||LB2->ItemIndex>=0||LB3->ItemIndex>=0)
{
 SQL = SQL+"where ";
 if(LB1->ItemIndex >=0 ){
 SQL = SQL+"Курс="+LB1->Items->Item[LB1->ItemIndex];
 }
 (LB2->ItemIndex >=0 ){
  if(SQL.Pos("Курс="))
   SQL = SQL+" AND ";
 
   SQL = SQL+"Специальность="+LB2->Items->Item[LB2->ItemIndex];
  }
 (LB3->ItemIndex >=0 ){
  if(SQL.Pos("Курс=")||SQL.Pos("Специальность="))
   SQL = SQL+" AND ";
 
   SQL = SQL+"Семестр="+LB3->Items->Item[LB3->ItemIndex];
  }

}
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add(SQL);
ADOQuery1->Active = true;
DataSourse1->DataSet = ADOQuery1;
DBGrid1->DataSourse = DataSourse1;

Соответственно - имя таблицы вы подставляете свое. Кроме того, здесь не делается проверки, ну и вобще - существует более оптимальный способ формировать запросы чем этот(точнее, это просто учебный пример - в реальной программе так стоит делать только от большой безнадеги :)), - но пока разберитесь хотя бы с ним.
12K
08 декабря 2007 года
Sholah_Weras
99 / / 04.12.2007
2 _kot
Спасибо, почти работает, но выдает ошибку:
"Ошибка синтаксиса (пропущен оператор) в выражении запроса 'тут моя строка''.
Посмотрел учебник, никаких, жизненно необходимых операторов для моего примера - не нашел. Наверное, плохо искал)
В чем может быть дело?
9.5K
08 декабря 2007 года
leahov
54 / / 09.12.2005
Цитата: oxotnik333
x0, x1, epsilon - аргументы ф-ции modinewton
если ты задаешь значения для epsilon = StrToFloat(Edit3->Text);
float x0 = a;
то почему не задаешь значение для х1 ?

(это если не вдаваясь в математику, тут я забыл все на корню)



не могу понять как его использовать, пробывал и x0=x1 и x1 = x1 - x0, ещё несколько вариантов перепробывал или ничего не меняется или виснит или вообще stack overflow. кто с математикой дружит, пожалуйста подскажите как сделать чтоб шел расчет.

1
08 декабря 2007 года
kot_
7.3K / / 20.01.2000
Цитата: Sholah_Weras
2 _kot
Спасибо, почти работает, но выдает ошибку:
"Ошибка синтаксиса (пропущен оператор) в выражении запроса 'тут моя строка''.
Посмотрел учебник, никаких, жизненно необходимых операторов для моего примера - не нашел. Наверное, плохо искал)
В чем может быть дело?


Строку запроса увидеть можно?

12K
08 декабря 2007 года
Sholah_Weras
99 / / 04.12.2007
Цитата: kot_
Строку запроса увидеть можно?



'3 курс AND Первый семестр AND специальность M'

И в догонку вопрос:
Получил я необходимые мне столбцы.
По примеру:
3 курс Первый семестр специальность M-31
3 курс Первый семестр специальность M-32
3 курс Первый семестр специальность M-33

Можно ли как нибудь получить остатки (строки), от вычета из столбца строки запроса:
"-31"
"-32"
"-32"
?

1
08 декабря 2007 года
kot_
7.3K / / 20.01.2000
Цитата: Sholah_Weras
'3 курс AND Первый семестр AND специальность M'


Акуеть! Это что????? :D
Посмотрите внимательно на код приведенный мной - и объясните как подобная строка может сформироваться?

Цитата: Sholah_Weras

И в догонку вопрос:
Получил я необходимые мне столбцы.
По примеру:
3 курс Первый семестр специальность M-31
3 курс Первый семестр специальность M-32
3 курс Первый семестр специальность M-33

Можно ли как нибудь получить остатки (строки), от вычета из столбца строки запроса:
"-31"
"-32"
"-32"
?


Вобще-то, у строки есть метод - который называется SubString. Но я рекомендую прежде чем ставить перед собой такие задачи - прочесть ну хоть Архангельского что ли. Потому как, судя по заданным вами вопросам, страшно далеки вы что от баз данных, что от программирования. Поэтому давайте вы сначала ваши столбцы получите - а потом будете задавать вопросы дальше. :D Ок? И вопросы лучше задавайте в личных сообщениях или через аську.

1
08 декабря 2007 года
kot_
7.3K / / 20.01.2000
Цитата: leahov
не могу понять как его использовать, пробывал и x0=x1 и x1 = x1 - x0, ещё несколько вариантов перепробывал или ничего не меняется или виснит или вообще stack overflow. кто с математикой дружит, пожалуйста подскажите как сделать чтоб шел расчет.


Я предупреждаю - никто за вас численные методы делать не будет. В созданной вами теме я помоему вполне подробно объяснил, как модифицировать алгоритм. [COLOR="Red"]Дальнейшее обсуждение лично для вас и для того, кто продолжит эту тему мусолить, закончится нарушением. Основанием для этого может служить:
1. Выклянчивание готового кода - что прямо запрещено правилами топика.
2. Не желание разбираться самому в базовых основах языка.
3. Попытка за счет других решать свои задачи.[/COLOR]

То ТО данная тема для начинающих - еще не следует что ее нужно наводнять сообщениями которые никому кроме вас не нужны.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог