Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Проблемма со StringGrid в БД


Автор: Vitalishe 29.7.2007, 02:13
Привет всем!

пишу БД, и в одной из форм возникла незадача. Есть данные в таблице, которую надо отобразить на форме, идиальным вариантом стал бы StringGrid, размером 9*5, однако ньюанс

автоматически компоненты ADOTable(Query) в состоянии Insert() или Edit() могут не перейти, используя DBNavigator и компоненты Data Controls, раньше я делал так: 

\\на OnActivateForm вешал следующий код
Код
 MainFrm->DBNavigator->DataSource = (DM = SomeSource)

При нажатии кнопок на DBNavigator всё воркало. 
Но в случае со StringGrid - нет.

посему надо:

0. при загрузке формы загрузить в StringGrid проверить, есть ли данные в таблице, если да то загрузить в состоянии Bworse() или Edit(), если нет то вызвать метод Insert(); как  лучше сделать проверку? Дайте примерsmile

1.  Допустим таблица не пуста, тут вопрос такой: данные считать для каждого поля можно только как приведено в коде ниже или есть варианты как с массивом 8*4?
Пример:
    
Код
StringGrid-Cells[1][1] = DM->ADOTable->FieldByName("SomeField")->Value;


2. Если есть варианты с массивом, как потом отсортировать всё по полям таблицы?

3. Возникает ошибка при чтении из базы данных *.MDB полей таблице ("Не может привести значение Null к String") если записи нет, но подгружает данные в Grid из таблицы, если они есть.

Код
 Grid->Cells[1][1] = DM->ADOTable->FieldByName("SomeField")->Value;


Попытлся решить поблему так: 
Код
Grid->Cells[1][1].ToInt = DM->ADOTable->FieldByName("SomeField")->Value;

Как результат вообще перестал читать данные smile:

Если есть пример работы со String Grid дайте поджалуйста, или посоветуйте как исправить эти ошибки

Автор: Rodman 29.7.2007, 11:30
Цитата(Vitalishe @  29.7.2007,  01:13 Найти цитируемый пост)
идиальным вариантом стал бы StringGrid

поясни почему??? чем тебе TDBGrid не угадил?!

Автор: Vitalishe 29.7.2007, 14:42
Rodman, 

Визуальный вариант. Наиболее оптимальный в данном решени, в TDBGrid так не сдалаешь, по-моему. Обрати внимание на расположение данных в столбцах и строках: каждая ячейка - одино поле таблицы 8*4 (смотри приложенную table.jpg картинку)

{ 0 0 0 0
  0 0 0 0
  0 0 0 0
  0 0 0 0
  0 0 0 0
  0 0 0 0
  0 0 0 0
  0 0 0 0}

Автор: witex 29.7.2007, 15:18
Напиши обработчик на ДБ навигатор тогда свой! или сощай свои кнопки и прописывай события! что тебе надо сделать! по другому ни как!

я просто не понимаю ваабше смысла ДБНавигатора в этом случае!

Автор: Rodman 30.7.2007, 16:52
Цитата(Vitalishe @  29.7.2007,  13:42 Найти цитируемый пост)
Обрати внимание на расположение данных в столбцах и строках: каждая ячейка - одино поле таблицы 8*4

это все поправимо!!! от расположения текста до его размера!

Автор: Vitalishe 31.7.2007, 01:35
Rodman, 
если есть примерчик работы с DBGrid в таком ключе, выложи пожалуйста...

Автор: Vitalishe 31.7.2007, 04:00
Разобрался в чем ошибка, дело не в приведении типов данных, а в обращении к несуществующей записи.

Автор: Santilka85 31.7.2007, 05:15
Vitalishe, пометь вопрос как решённый smile 

Автор: Vitalishe 31.7.2007, 09:42
 smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)