Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Работа с БД

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
Shurentij



Зарегистрирован: 27.09.2005
Сообщения: 19

СообщениеДобавлено: Ср Окт 26 2005 14:29    Заголовок сообщения: Работа с БД Ответить с цитатой

Builder C++ 6
Имеется компонент DBGrid в которов выводится данные из базы №1.
Хотелось бы сделать следующее:
При выделении одной из строчек по нажатию клавиши (обработку нажатия клавиш пояснять не надо) эта строка копируется в другую базу №2 (структура ее та же).
Базы DBF.

И еще пару вопросов - как сделать чтобы при нажатии правой кнопки мыщи по выделенной строке выпадало контекстное меню.
Каким образом обрабатывать несколько выделенных строк (т.е. параметр MultiSelekt у DBGrid =true, и можно выделить несколько строк удерживая CTRL.)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Dimasm



Зарегистрирован: 25.04.2005
Сообщения: 454

СообщениеДобавлено: Ср Окт 26 2005 15:10    Заголовок сообщения: Re: Работа с БД Ответить с цитатой

Shurentij писал(а):
Builder C++ 6
Имеется компонент DBGrid в которов выводится данные из базы №1.
Хотелось бы сделать следующее:
При выделении одной из строчек по нажатию клавиши (обработку нажатия клавиш пояснять не надо) эта строка копируется в другую базу №2 (структура ее та же).
Базы DBF.


Код:
   
Table2->Append();
Table2->FieldByNams("Field1")->Value = Table1->FieldByName("Field1")->Value;
Table2->FieldByNams("Field2")->Value = Table1->FieldByName("Field2")->Value;
....
Table2->Post();

примерно так
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Shurentij



Зарегистрирован: 27.09.2005
Сообщения: 19

СообщениеДобавлено: Сб Окт 29 2005 09:30    Заголовок сообщения: Ответить с цитатой

А как же все-таки обрабатывать строки если их выделено несколько?
Хотелось бы увидеть кусочек кода.

Спасибо
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Dimasm



Зарегистрирован: 25.04.2005
Сообщения: 454

СообщениеДобавлено: Сб Окт 29 2005 14:07    Заголовок сообщения: Ответить с цитатой

Shurentij писал(а):
А как же все-таки обрабатывать строки если их выделено несколько?
Хотелось бы увидеть кусочек кода.

есть ADOTable1 - DataSoure1 - DBGrid1 , Memo1
Код:
        TBookmark Bookmark = ADOTable1->GetBookmark();
        ADOTable1->DisableControls();
        for( int i = 0; i < DBGrid1->SelectedRows->Count ; i ++ )
        {
                DBGrid1->DataSource->DataSet->Bookmark
                        = DBGrid1->SelectedRows->Items[i];
                // или так
                // ADOTable1->Bookmark=DBGrid1->SelectedRows->Items[i];
                Memo1->Lines->Append(
                        ADOTable1->FieldByName("Men_ID")->AsString+"\t"+
                        ADOTable1->FieldByName("Men_name")->AsString
                        );
        };
        ADOTable1->GotoBookmark(Bookmark);
        ADOTable1->EnableControls();
        ADOTable1->FreeBookmark(Bookmark);
;

_________________
С уважением Dimasm
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Shurentij



Зарегистрирован: 27.09.2005
Сообщения: 19

СообщениеДобавлено: Вс Окт 30 2005 17:13    Заголовок сообщения: Ответить с цитатой

Зачем такой сложный код - имеется в виду зачем использовать ADO (я не знаю что это такое).

Переписал код так и он работает.
Код:

for( int i = 0; i < DBGrid1->SelectedRows->Count ; i ++ )
        {
                DBGrid1->DataSource->DataSet->Bookmark
                        = DBGrid1->SelectedRows->Items[i];
                        Memo1->Lines->Append(
                        DBGrid1->DataSource->DataSet->
                                      FieldByName("Men_ID")->AsString+"\t"+
                        DBGrid1->DataSource->DataSet->
                                      FieldByName("Men_name")->AsString);
        }


На мой взгляд так понятнее.

И еще небольшая пачка вопросов. Зачем использовать метод Table->Post(). И без него вроде все работает, а с ним у меня компилятор ругается. База DBF.

Как програмно полностью отчистить БД. Есть ли какиенибудь функции или надо использовать цикл и Delete().

Почему когда мы удаляем из БД строки, то размер файла БД не изменяется.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Dimasm



Зарегистрирован: 25.04.2005
Сообщения: 454

СообщениеДобавлено: Вс Окт 30 2005 17:40    Заголовок сообщения: Ответить с цитатой

Shurentij писал(а):
Зачем такой сложный код - имеется в виду зачем использовать ADO (я не знаю что это такое)..

Сложный код, во превых для того, чтобы курсор в DBGrid остался там же где и был до выполнения кода

Код:
        TBookmark Bookmark = ADOTable1->GetBookmark();
        ADOTable1->DisableControls();
        ...
        ADOTable1->GotoBookmark(Bookmark);
        ADOTable1->EnableControls();
        ADOTable1->FreeBookmark(Bookmark);

ADOTable это примерно тоже что и Tabe, в том смысле, что работа с ними почти не отличается
Просто мне BDE кажется таким неудобным и корявым. Этот BDE ещё и с собой (программой) тягать надо, фуConfused
С базками Access на мой взгляд работать проще, по этому я использую ADO и OLE.Jet или ODBC провайдеры.
Shurentij писал(а):

И еще небольшая пачка вопросов. Зачем использовать метод Table->Post(). И без него вроде все работает, а с ним у меня компилятор ругается. База DBF.

->Edit() - переводит базу в режим изменения записи
->Append() - режим добавления новой записи
->Insert() - вставка записи
а потом в конце
->Post() - подтверждает изменение(добавление, вставку)

по поводу ошибки Question

Shurentij писал(а):
Как програмно полностью отчистить БД. Есть ли какиенибудь функции или надо использовать цикл и Delete().

Ты вообще с SQL знаком? если работаешь с БД настоятельно советую его изучить. SQL ГАРАЗДО ВАЖНЕЕ чем всякие Table и Post
С ADO компанентами я делаю так
Код:

   ADOCommand1->CommandText = "DELETE * FROM MyDataBase";
   ADOCommand1->Excute();

само собой ADOCommand должен быть подключён к БД
с BDE компанентами не пробовал Sad
Shurentij писал(а):

Почему когда мы удаляем из БД строки, то размер файла БД не изменяется.

Ой, файл базы данных такая сложная штука, в общем провайдеру данных (в твоём случае BDE) лучше знать какой должен быть размер. Не заморачивайся по этому поводу.
У меня одна базка Access после года работы выросла до 12 метров и стала тормозить.
Операция "сжать и восстановить" сжала базу до 4-х метров, и тормоза пропали. Думаю подобное есть и для dbf
_________________
С уважением Dimasm
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...