Поиск:

Ответ в темуСоздание новой темы Создание опроса
> значение ячейки DBGrida 
V
    Опции темы
AKN
Дата 25.3.2006, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 11.11.2005

Репутация: нет
Всего: нет



Подскажите, как обратится к ячейке DBGrida и получить ее текст? нужно сделать такую вот вставку:

Код

Query1.Close;
Query1.SQL.Add('IUPDATE');
Query1.SQL.Add('sotrudniki_data');
Query1.SQL.Add('SET');
Query1.SQL.Add('(tel = ' + Edit1.Text);
Query1.SQL.Add('mob_tel =' + Edit2.Text);
Query1.SQL.Add('birsday =' + Edit3.Text);
Query1.SQL.Add('WHERE');
Query1.SQL.Add('ID = ' + ??текст первого столбца грида);
Query1.ExecSQL;



спасибо!
PM MAIL   Вверх
bas
Дата 25.3.2006, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 446
Регистрация: 14.8.2002
Где: Молдова, Кишинев

Репутация: 1
Всего: 2



Цитата(AKN @ 25.3.2006, 12:34 Найти цитируемый пост)
Подскажите, как обратится к ячейке DBGrida и получить ее текст

Грид данных не содержит, а только отображает , но приэтом полностью синхронизирован с набором данных.
Поэтому
Цитата(AKN @ 25.3.2006, 12:34 Найти цитируемый пост)
Query1.SQL.Add('ID = ' + ??текст первого столбца грида);

Можно смело обращаться к текущей записи грида через
DBGrid.DataSource.DataSet. а дальше все тривиально.
PM MAIL   Вверх
AKN
Дата 25.3.2006, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 11.11.2005

Репутация: нет
Всего: нет



дело вот в чем:

Код

select 
           s.ID, 
           s.nam, 
           sd.tel, 
           sd.mob_tel,  
           sd.birsday,  
           sd.status, 
           sd.doljnost, 
           sd.date_priema
from 
sotrudniki s,
sotrudniki_data sd 
where s.id = sd.id


, теперь мне нужно заполнить данные на сотрудников (поля в таблице sotrudniki_data), я и пишу:

Код

Query1.Close;
Query1.SQL.Add('UPDATE');
Query1.SQL.Add('sotrudniki_data');
Query1.SQL.Add('SET');
Query1.SQL.Add('(tel = ' + Edit1.Text);
Query1.SQL.Add('mob_tel =' + Edit2.Text);
Query1.SQL.Add('birsday =' + Edit3.Text);
Query1.SQL.Add('WHERE');
Query1.SQL.Add('ID(таблицы куда вставляются данные) = ' + DBGrid1.DataSource.DataSet.FieldValues['ID'](АйДи сотрудника в таблице сотрудников));
Query1.ExecSQL;

а он говорит типа поле не найдено.

Просто то что мне нужно содержится в первом столбце текущей записи грида

З.Ы. таблица парадоксовская, будет на фаерберде

PM MAIL   Вверх
Vit
Дата 25.3.2006, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 14
Всего: 207



Как минимум так:

Код

Query1.Close;
Query1.SQL.Add('UPDATE');
Query1.SQL.Add('sotrudniki_data');
Query1.SQL.Add('SET');
Query1.SQL.Add('(tel = ' + Quotedstr(Edit1.Text));
Query1.SQL.Add('mob_tel =' + Quotedstr(Edit2.Text));
Query1.SQL.Add('birsday =' + Quotedstr(Edit3.Text));
Query1.SQL.Add('WHERE');
Query1.SQL.Add('ID = ' + Quotedstr(DBGrid1.DataSource.DataSet.FieldByName('ID').asString));
Query1.ExecSQL;


Но ошибок может быть и гораздо больше зависит от предыдущего кода и структуры таблиц


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
av78
Дата 25.3.2006, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 21.12.2005
Где: Херсон

Репутация: нет
Всего: нет



а можно так, например:

Код

IBSQL1.SQL.Clear;
IBSQL1.SQL.Append('UPDATE TBL_UNIT_MEASURE SET TBL_UNIT_MEASURE.NAME= ''' + InputString + ''' WHERE TBL_UNIT_MEASURE.ID=''' + DBGrid1.Fields[0].AsString + '''');
IBSQL1.Prepare;
IBSQL1.ExecQuery;


где
DBGrid1.Fields[0].AsString

и есть обращение
PM MAIL YIM   Вверх
AKN
Дата 25.3.2006, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 11.11.2005

Репутация: нет
Всего: нет



Vit, на

Код

 Query1.SQL.Add('ID = '+DBGrid1.DataSource.DataSet.FieldByName('ID').asString);


ругается, говорит что полей ID не найдено. Похоже проблема в том, что у меня в обоих таблицах поле одинаково называется... Можно как-то его идентифицировать конкретнее?
На
Код

Query1.SQL.Add('ID = ' + Quotedstr(DBGrid1.DataSource.DataSet.FieldByName('ID').asString));
- тоже ругается - говорит что ошибка ввода в файл при компиляции...

Это сообщение отредактировал(а) AKN - 25.3.2006, 22:59
PM MAIL   Вверх
Vit
Дата 27.3.2006, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 14
Всего: 207



Цитата(AKN @ 25.3.2006, 13:58 Найти цитируемый пост)
ругается, говорит что полей ID не найдено. Похоже проблема в том, что у меня в обоих таблицах поле одинаково называется... Можно как-то его идентифицировать конкретнее?



Нету там в запросе двух таблиц. Мой код выполняет один запрос к одной таблице 'sotrudniki_data', и вообще то что Вы делаете похоже на какую-то кашу... Приведите целиком код процедуры, скорее всего

1. Ошибки генерятся не моим кодом, а в следствии хаотичного использования компонентов
2. Сама постановка задачи "значение ячейки DBGrida" говорит о полном непонимании того как дельфи работает с базами данных. Вот тут статья:

http://vingrad.ru/ART-DELPHI-000034

читать до полного просветления



Цитата(AKN @ 25.3.2006, 13:58 Найти цитируемый пост)
тоже ругается - говорит что ошибка ввода в файл при компиляции...


А можно по английски точное сообщение об ошибке? Я за 13 лет работы с Дельфи ни разу не видел ошибки "ввода в файл"!

Боюсь что отвечая Вам на Ваши вопросы в той форме в которой они сформулированы - это борьба с ветряными мельницами. Скорее всего проблем в данных конкретных вопросах нет вовсе, проблемы гораздо проще (для меня) и гораздо сложнее (для Вас).
Моя рекомендация будет:
1. Прочитать ту статью
2. Если понятнее не станет, опубликовать код а не кусочек, будем все вместе ставить его с головы на ноги



--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
bas
Дата 27.3.2006, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 446
Регистрация: 14.8.2002
Где: Молдова, Кишинев

Репутация: 1
Всего: 2



Цитата(Vit @ 27.3.2006, 16:20 Найти цитируемый пост)
Если понятнее не станет, опубликовать код а не кусочек, будем все вместе ставить его с головы на ноги

Согласен.
Куда смотрит грид и куда вставляем данные и как эти поля (ID) называються в этих источниках данных?
PM MAIL   Вверх
AKN
Дата 28.3.2006, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 11.11.2005

Репутация: нет
Всего: нет



постановка задачи:

есть таблица

_____________________________
ID | name
_________|___________________
1 | ИВАНОВ
2 | СИДОРОВ
3 | ПЕТРОВ



есть вторая таблица (данные о сотрудниках)
_________________________________________|___________________________
ID (сотрудника из первой таблицы) | номер телефона и т.д.
|
_________________________________________|___________________________
1 | Null (эти поля еще пустые)
2 | Null
3 | Null
4 | Null


Задача: заполнить (наглядно) вторую таблицу, то есть пользователю будет предоставлена таблица, в которой в первом поле будут фамилии сотрудников, а остальные поля будут пустыми. Он заполнит нужные поля напротив сотрудника, нажмет кнопку и информация будет зафиксирована в базе данных. Проблема в том, что пользователь может заполнить поля напротив любого сотрудника, т.е. нужно узнать, какому же сотруднику будет принадлежать данная информация


например:

_________________________________________|___________________________
ID (сотрудника из первой таблицы) | номер телефона и т.д.
|
_________________________________________|___________________________
ИВАНОВ | Null (эти поля еще пустые)
СИДОРОВ | Null
ПЕТРОВ | г. Харьков


Мне нужно узать, куда же вставлять вот этот "г. Харьков", напротив какого же сотрудника?

Т. е. в результате выполнонной вставки таблица 2 стала


_________________________________________|___________________________
ID (сотрудника из первой таблицы) | номер телефона и т.д.
|
_________________________________________|___________________________
1 | Null (эти поля еще пустые)
2 | Null
3 | г. Харьков
4 | Null


Надеюсь разписанов более-менне понятно...
PM MAIL   Вверх
Tror
Дата 28.3.2006, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 29.4.2005
Где: Кишинёв

Репутация: нет
Всего: 4



ну во первых ID (сотрудника из первой таблицы) во второй таблице это
никак не
ИВАНОВ, СИДОРОВ, ПЕТРОВ, а 1, 2, 3,

ИВАНОВ, СИДОРОВ, ПЕТРОВ -- это name из первой таблицы

если честно, то я тоже занимаюсь базами данных недавно но насколько я понял
в твоей базе между первой и второй таблицами связь 1-1, тогда зачем их разделять?

Это сообщение отредактировал(а) Tror - 28.3.2006, 13:45
--------------------
Не говори всегда что знаешь, но знай всегда что говоришь. /Клавдий/============================================Кто может -- тот делает. Кто не может... тот получает сертификат MCSE ;)
PM MAIL ICQ   Вверх
sexton
Дата 28.3.2006, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sexton=Пономарь (eng)
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 5.5.2004
Где: Ульяновск

Репутация: нет
Всего: 9



Если я правильно понял - читай материалы по отношениям master-detail между таблицами.
PM MAIL WWW ICQ   Вверх
AKN
Дата 28.3.2006, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 11.11.2005

Репутация: нет
Всего: нет



Tror,
Цитата

если честно, то я тоже занимаюсь базами данных недавно но насколько я понял
в твоей базе между первой и второй таблицами связь 1-1, тогда зачем их разделять?

потому что эти имена сотрудников еще будут использоваться в нескольких больших таблицах, а введение ID должно значительно уменьшить размер базы данных

Цитата

ну во первых ID (сотрудника из первой таблицы) во второй таблице это
никак не
ИВАНОВ, СИДОРОВ, ПЕТРОВ, а 1, 2, 3,
ИВАНОВ, СИДОРОВ, ПЕТРОВ -- это name из первой таблицы


ну
ошибся- там будет типа

Код

SELECT name FROM sotrudniki WHERE ID = <значение>


Это сообщение отредактировал(а) AKN - 28.3.2006, 14:07
PM MAIL   Вверх
Vit
Дата 28.3.2006, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 14
Всего: 207



Цитата(AKN @ 28.3.2006, 04:12 Найти цитируемый пост)
Задача: заполнить (наглядно) вторую таблицу, то есть пользователю будет предоставлена таблица, в которой в первом поле будут фамилии сотрудников, а остальные поля будут пустыми.


Так, ответить точно не могу, потому как не знаю синтаксиса SQL Firebird, но в большинстве баз данных возможны запросы типа:

Код

Update Table1
Set t1.Field1=t2.Field1
From Table1 t1
Inner join Table2 t2 on t1.id=t2.id


Т.е. одним запросом заполняется вся таблица. Более конкретно - см. синтаксис SQL запроса Update в документации по Firebird.


Цитата(AKN @ 25.3.2006, 06:51 Найти цитируемый пост)
.Ы. таблица парадоксовская, будет на фаерберде


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



Цитата(AKN @ 28.3.2006, 04:12 Найти цитируемый пост)
Проблема в том, что пользователь может заполнить поля напротив любого сотрудника, т.е. нужно узнать, какому же сотруднику будет принадлежать данная информация


Это проблема архитектуры. Первая и вторая из приведенных вами таблиц должны быть сопоставлены по полям ID. Т.е. Иванов если он под номером 3 в первой таблице он должен идти и под номером 3 во второй таблицы. Вы не должны предоставлять пользователю возможность редактировать что угодно где угодно, и не должны давать редактировать поле ID, чтобы реализовать это вы должны:

1. Отказаться от DBGrid как метода ввода данных пользователем
2. ПОказывать пользователю форму с обычными или DB компонентами типа TEdit или TDBEdit - пусть вводит свои данные. Если использовать DB компоненты, то надо сначала позиционировать запись именно на конкретного человека и пусть заполняет, а если обычные компоненты, то по нажатию кнопки Save сохранить введенные данные под его номером.



PS. Ваши проблемы начались с того самого момента как вы поставили DBGrid на форму. Удалите его, и вы сможете наконец начать работать с базой данных по нормальному.




--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
AKN
Дата 29.3.2006, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 11.11.2005

Репутация: нет
Всего: нет



Vit, огромное спасибо за качественный и полный ответ. Тема закрыта. Всем спасибо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0595 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.