Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Select в ADOQuery C++ XE3
|
|||
|---|---|---|---|
|
#18+
Доброго всем дня! Решили на работе перейти с Access на SQL! Все бы хорошо, только в билдере я практически ноль! Только начал, а уже возникла проблема в C++ - не могу заставить запрос в ADOQuery работать! Знаю что скорее всего в что-то не дописываю, только никак понять не могу, много книг перерыл, форумов- толку нет! Короче смысл таков: надо чтобы запрос выводил по значению в DBComboBox2 столбец со значениями из таблицы Dannie в DBComboBox1! Значения в DBComboBox2 я прописал в свойстве String. Запрос у меня простенький и в самом SQL все работает правильно:SELECT Naimenovanie FROM Dannie WHERE Tematika = Tematika; В свойство Parameters внес параметр Tematika. На событые OnDropDown поля DBComboBox2 я прописал следующее: void __fastcall TForm5::DBComboBox1DropDown(TObject *Sender) { ADOQuery2->Active = False; ADOQuery2->Parameters->ParamByName("Tematika")->Value = DBComboBox2->Text; ADOQuery2->Active = True; } Все подключено к базе через ADOConnection (строки из таблиц выводит=))) Уже целую неделю пытаюсь понять - безрезультатно! Кто чем может помочь - прошу! На все вопросы отвечу! Заранее спасибовсем откликнуышимся! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 08:18 |
|
||
|
Select в ADOQuery C++ XE3
|
|||
|---|---|---|---|
|
#18+
FOGOT-BAstA, попробуй что-то в этом духе (правда в билдере не проверял, нет под рукой) Только не понятно, тебе в ComboBox1 нужно вывести разовое значение, или накапливать их там списком при каждом выборе в ComboBox2. Если разово, то зачем ComboBox, можно обойтись каким-нибудь TEdit или Tlabel void __fastcall TFormMain::ComboBox1Change(TObject *Sender) { AnsiString SQLStr; SQLStr = "select Naimenovanie from Dannie where Tematika = \'" + ComboBox2->Text +"\'"; if(Query->Active) Query->Close(); Query->SQL->Clear(); Query->SQL->Add(SQLStr); try { Query->Open(); Query->First(); ComboBox1->Text = Query->FieldByName("Naimenovanie ")->AsString; } catch(...){ShowMessage("Error");} if(Query->Active)Query->Close(); } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 10:16 |
|
||
|
Select в ADOQuery C++ XE3
|
|||
|---|---|---|---|
|
#18+
Baby1, В ComboBox2 будет выводиться список значениий всех строк из таблицы Dannie у которых Tematika равна значению из ComboBox1. В таблице Dannie уже забиты готовые значения! Может я что-то усложняю и можно сделать проще? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 11:41 |
|
||
|
Select в ADOQuery C++ XE3
|
|||
|---|---|---|---|
|
#18+
FOGOT-BAstA, тогда в предыдущем примере в try будет что-то вроде try { Query->Open(); Query->First(); while(!Query->Eof) { ComboBox1->Items->Add(Query->FieldByName("Naimenovanie ")->AsString); Query->Next(); } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 12:45 |
|
||
|
Select в ADOQuery C++ XE3
|
|||
|---|---|---|---|
|
#18+
Если я правильно понял задачу, то лови работающий кусок: при нажатии на кнопку коннектимся к БД, при выборе записи в одном боксе, приходят значения во второй #include <vcl.h> #pragma hdrstop #include <ADODB.hpp> #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; TADOConnection *Conn; TADOQuery *Query; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::BtnConnClick(TObject *Sender) { AnsiString ConnectionString; ConnectionString = "Provider=SQLOLEDB.1;" "Password=password;" "Persist Security Info=True;" "User ID=userid;" "Initial Catalog=databasename;" "Data Source=servername" ; Conn = new TADOConnection(NULL); Conn->ConnectionString = ConnectionString; Conn->LoginPrompt = false; Conn->Open(); } //--------------------------------------------------------------------------- void __fastcall TForm1::ComboBox2Change(TObject *Sender) { AnsiString SQLStr; ComboBox1->Items->Clear(); Query = new TADOQuery(NULL); if(Query->Active) Query->Close(); Query->Connection = Conn; SQLStr = "select field2 from TableTest where field1 = \'" + ComboBox2->Text +"\'"; if(Query->Active) Query->Close(); Query->SQL->Clear(); Query->SQL->Add(SQLStr); try { Query->Open(); Query->First(); while(!Query->Eof) { ComboBox1->Items->Add(Query->FieldByName("field2")->AsString); Query->Next(); } ComboBox1->ItemIndex = 0; } catch(...){ShowMessage("Error");} if(Query->Active)Query->Close(); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { if(Query->Active) Query->Close(); delete Query; if(Conn->Connected) Conn->Close(); delete Conn; } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 13:09 |
|
||
|
Select в ADOQuery C++ XE3
|
|||
|---|---|---|---|
|
#18+
вот это лучше вынести в TForm1::BtnConnClick Query = new TADOQuery(NULL); if(Query->Active) Query->Close(); Query->Connection = Conn; нефига при каждом выборе создавать новый Query ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 13:12 |
|
||
|
Select в ADOQuery C++ XE3
|
|||
|---|---|---|---|
|
#18+
Baby1, спасибо огромаенное! Заработало! У меня не работало потому что я в AnsiString не перевел чтоли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2013, 05:57 |
|
||
|
Select в ADOQuery C++ XE3
|
|||
|---|---|---|---|
|
#18+
FOGOT-BAstA, Если честно, я вообще не разбирался в твоем коде... просто написал так, как это сделал бы я... не ручаюсь за красоту кода, наверняка можно написать гораздо лучше, но пример работающий.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2013, 13:55 |
|
||
|
Select в ADOQuery C++ XE3
|
|||
|---|---|---|---|
|
#18+
P.S.рад, что смог помочь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2013, 13:56 |
|
||
|
Select в ADOQuery C++ XE3
|
|||
|---|---|---|---|
|
#18+
Продолжаю работать над своим чудом и возникло еще пару вопросов: 1. При вставке с помощью запросов значений в некоторые поля DBEdit и DBMemo при повторном нажатии на них (допустим чтобы скопировать полученное значение) значение пропадает! Может кто сталкивался с таким!? 2. Как можно вырвать имя пользователя который последний раз работал/изменял данную запись (хочу чтобы отображался последний кто изменял данное поле). Baby1 , жаль плюсануть не могу=) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2013, 07:29 |
|
||
|
Select в ADOQuery C++ XE3
|
|||
|---|---|---|---|
|
#18+
FOGOT-BAstA, Код покажите? Если пропадает, то либо перескакивает курсор в датасете либо данные не сохраняются ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2013, 19:44 |
|
||
|
Select в ADOQuery C++ XE3
|
|||
|---|---|---|---|
|
#18+
BlackEric, Вот код вставки св-ва FileName из OpenDialog: void __fastcall TForm6::Button1Click(TObject *Sender) { if (Form6->OpenDialog1->Execute()) { Form6->DBMemo1->Text = Form6->OpenDialog1->FileName; Использовал АДОQuery и АDOTable, но сейчас думаю что надо DataSet и Command использовать, а то выскакивает ошибка поиска строк для обновления! Причем у созданных далее 2-х записей такой проблемы нет. А вот 4 делаю там такая же фигня! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2013, 11:56 |
|
||
|
Select в ADOQuery C++ XE3
|
|||
|---|---|---|---|
|
#18+
FOGOT-BAstABlackEric, Вот код вставки св-ва FileName из OpenDialog: void __fastcall TForm6::Button1Click(TObject *Sender) { if (Form6->OpenDialog1->Execute()) { Form6->DBMemo1->Text = Form6->OpenDialog1->FileName; Использовал АДОQuery и АDOTable, но сейчас думаю что надо DataSet и Command использовать, а то выскакивает ошибка поиска строк для обновления! Причем у созданных далее 2-х записей такой проблемы нет. А вот 4 делаю там такая же фигня! 1. Забудьте про АDOTable. Используйте датасет. 2. Присваивайте данные не компоненту, а полю датасета к которуму забинден компонент и делайте Post. Тогда все должно быть корректно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2013, 17:12 |
|
||
|
Select в ADOQuery C++ XE3
|
|||
|---|---|---|---|
|
#18+
2. Присваивайте данные не компоненту, а полю датасета к которуму забинден компонент и делайте Post. Тогда все должно быть корректно. Можешь показать маленький примерчик, а то в моих конспектах с института такого нет))) Спасибо заранее! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2013, 12:14 |
|
||
|
Select в ADOQuery C++ XE3
|
|||
|---|---|---|---|
|
#18+
FOGOT-BAstAПродолжаю работать над своим чудом и возникло еще пару вопросов: 2. Как можно вырвать имя пользователя который последний раз работал/изменял данную запись (хочу чтобы отображался последний кто изменял данное поле). Как вариант, вести в таблице поле, в котором хранить данные о создавшем/изменившем запись. При вставке/изменении записи в таблице прописывать в него соответствующую информацию. Я обычно пишу SYSTEM_USER(значение текущего имени входа). Еще обычно требуется дата последнего изменения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 14:47 |
|
||
|
Select в ADOQuery C++ XE3
|
|||
|---|---|---|---|
|
#18+
Baby1, Сделал вот такой триггер который при добавлении или изменении строки в таблице Proshivki2 заносит имя и дату изменения в таблицу UpdateProshivki1: ALTER TRIGGER updatedby4 ON Proshivki2 FOR INSERT, UPDATE AS INSERT INTO UpdateProshivki1 (ID, UpdateDate, UpdatedBy) SELECT ID, getdate(), SYSTEM_USER FROM inserted Дальше у меня возникла проблема как выводить ID изменений UpdateProshivki1 соответствующих ID строк таблицы Proshivki2 (чтобы в форме выводились только изменения сделанные над данной записью)?? Можно как-то в триггере прописать?или надо запрос на DBGrid писать? Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2013, 09:57 |
|
||
|
Select в ADOQuery C++ XE3
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Код: sql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2013, 12:11 |
|
||
|
Select в ADOQuery C++ XE3
|
|||
|---|---|---|---|
|
#18+
Я сделал проще: Создал триггер на занесение в стороннюю таблицу данных по изменению: [/SRC]ALTER TRIGGER updatedby4 ON Proshivki2 FOR INSERT, UPDATE AS INSERT INTO UpdateProshivki1 (ID, UpdateDate, UpdatedBy) SELECT ID, getdate(), SYSTEM_USER FROM inserted[/SRC] А потом в билдере по запросу выбираю соответствующие поля! Но спасибо за ответ, твой вариант с переменными таблицами попробую реализвать)) Кто-нибудь знает как в DBComboBox разрешить только забитые в него значения?Чтобы небыло вырианта что-то писать! Пробовал на события ставить ReadOnly=true , но все-ровно в некоторых случаях можно оставить пустую строку или написать отсебятину! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2013, 09:44 |
|
||
|
Select в ADOQuery C++ XE3
|
|||
|---|---|---|---|
|
#18+
FOGOT-BAstAКто-нибудь знает как в DBComboBox разрешить только забитые в него значения?Чтобы небыло вырианта что-то писать! ComboBox->Style = csDropDownList; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2013, 10:54 |
|
||
|
Select в ADOQuery C++ XE3
|
|||
|---|---|---|---|
|
#18+
FOGOT-BAstAА потом в билдере по запросу выбираю соответствующие поля!по какому запросу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2013, 11:26 |
|
||
|
Select в ADOQuery C++ XE3
|
|||
|---|---|---|---|
|
#18+
SELECT UpdateDate, UpdatedBy FROM UpdateProshivki1 WHERE ID = " + DBEdit5->Text Вот такой запрос сравнивает ID который в Edit и выводит соответствующие записи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2013, 08:54 |
|
||
|
Select в ADOQuery C++ XE3
|
|||
|---|---|---|---|
|
#18+
а, значит я неправильно понял задачу я думал, что FOGOT-BAstAстрок таблицы Proshivki2в Вашем диалоге несколько (грид там или типа того) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2013, 11:48 |
|
||
|
Select в ADOQuery C++ XE3
|
|||
|---|---|---|---|
|
#18+
Хахаха наверное дсотал тупыми вопросами всех уже=))) Но нужна подсказочка для решения такой задачи: Есть одна форма в С++ на которой будет работать 5-6 ОДНОТИПНЫХ таблиц (все столбцы идентичны по названию, кроме поля ID). Т.к. поля одинаковые, я хочу в зависимости от выбранного поля Тематика (опять оно=)))) выбирать конкретную такблицу! Пробовал реализовать (по-тупому) с помощью датасета и условий if-else, сравнивая из выбранного значения DBComboBox и подставляя соответствующие названия таблиц в CommandText компонента DataSet ADODataSet1->Close(); if (DBComboBox1->Text == "Комбайн") { ADODataSet1->Edit(); ADODataSet1->CommandText ="Kartochka_Kombain"; ADODataSet1->Open(); } else if (DBComboBox1->Text == "Трактор") { ADODataSet1->Edit(); ADODataSet1->CommandText="Kartochka_Traktor"; ADODataSet1->Open(); } else if (DBComboBox1->Text == "АГСЭ") { ADODataSet1->Edit(); ADODataSet1->CommandText="Kartochka_AGS"; ADODataSet1->Open(); } else if (DBComboBox1->Text == "АДАСЭ") { ADODataSet1->Edit(); ADODataSet1->CommandText="Kartochka_ADAS"; ADODataSet1->Open(); } else if (DBComboBox1->Text == "УКЭД") { ADODataSet1->Edit(); ADODataSet1->CommandText="Kartochka_YKED"; ADODataSet1->Open(); } else if (DBComboBox1->Text == "УКТУС-ТМ") { ADODataSet1->Edit(); ADODataSet1->CommandText="Kartochka_YKTYS"; ADODataSet1->Open(); } else if (DBComboBox1->Text == "УКШ") { ADODataSet1->Edit(); ADODataSet1->CommandText="Kartochka_YKSH"; ADODataSet1->Open(); } else { ShowMessage("Выберите тематику из списка! Иначе обратитесь к Администратору!"); } но не работает, то пишет что невозможно править датасет т.к. он закрыт, то открыт, и самое главное DBComboBox не вставляет значения пока ДатаСет не активирован...короче перепробовал открывать, закрывать по созданию, вставлять принудительно название таблиц в CommandText все тщетно... Спасибо заранее!=))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2013, 11:26 |
|
||
|
Select в ADOQuery C++ XE3
|
|||
|---|---|---|---|
|
#18+
Обратитесь к тому, кто проектировал Вашу БД и спросите - а зачем это он создал 6 однотипных таблиц вместо одной? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2013, 11:49 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38129581&tid=2020440]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
168ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 293ms |
| total: | 568ms |

| 0 / 0 |
