Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 22.05.2012
Сообщений: 14

Delphi + InterBase + SQL

18.12.2013, 05:17. Показов 1502. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Товарищи помогите реализовать удаление выбранной записи из DBGrid при том что у меня выводятся не все колонки, а та которая не выводится является ключём.

Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TForm3.FormShow(Sender: TObject);
begin
with DataModule2 do
begin
Query1.Close;
query1.sql.clear;
Query1.SQL.Add('SELECT NAME as Naimenovanie, KURS as Kurs FROM SUBJECTS;');
Query1.Open;
end;
DBGrid1.Columns.Items[0].Width := 200;
end;
p.s. такое никак не работает:
Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TForm3.Button3Click(Sender: TObject);
begin
with DataModule2 do
begin
  Query2.Close;
  Query2.SQL.Clear;
  Query2.SQL.ADD('DELETE FROM SUBJECTS WHERE K_DISC=');
  Query2.SQL.ADD(IntToStr(Query1.FieldByName('K_DISC').AsInteger));
  Query2.ExecSQL;
end;
end;
p.s.s. K_DISC является ключём
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.12.2013, 05:17
Ответы с готовыми решениями:

InterBase+Delphi
Господа профи, всех приветствую, подскажите плизз ссылки или литературу, ну или просто совет как начать. нужно вот что: субд InterBase +...

Delphi + InterBase
Здравствуйте. Делаю небольшой клиент для БД на Delphi 7 lite. Бд сделана на InterBase 6. Вообщем, создал алиас, указал путь к фалйлу БД....

delphi и interbase
как программно удалить все данные из таблицы в интербейсе?

10
 Аватар для arni
914 / 879 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
18.12.2013, 20:04
Цитата Сообщение от lev4ig Посмотреть сообщение
Delphi
1
Query2.SQL.ADD(IntToStr(Query1.FieldByName('K_DISC').AsInteger));
Тут вы подставляете значение из Query1.FieldByName('K_DISC').AsInteger. Смотрю на запрос в Query1, и не наблюдаю там поля K_DISC:
Цитата Сообщение от lev4ig Посмотреть сообщение
Delphi
1
Query1.SQL.Add('SELECT NAME as Naimenovanie, KURS as Kurs FROM SUBJECTS;');
Только Naimenovanie и Kurs. Что по вашему должен вернуть вызов?
Delphi
1
Query1.FieldByName('K_DISC').AsInteger
?
0
0 / 0 / 0
Регистрация: 22.05.2012
Сообщений: 14
18.12.2013, 22:05  [ТС]
Так в том то и дело я не знаю как это реализовать, то есть в таблице у меня 3 колонки (K_DISC,NAME,KURS), а вывожу в DBGrid я только NAME и KURS, но ключ то K_DISC, поэтому я не знаю как удалить выбранную запись, при условии что пара NAME и KURS уникальная, то есть NAME может повторяться, KURS может повторять, а вместе их можно назвать составным первичным ключем, но использовать их для поиска записей у меня так же не получается..
0
0 / 0 / 0
Регистрация: 22.05.2012
Сообщений: 14
18.12.2013, 22:12  [ТС]
Delphi
1
2
3
4
5
6
7
8
9
10
with DataModule2 do
begin
  Query2.Close;
  Query2.SQL.Clear;
  Query2.SQL.ADD('DELETE FROM SUBJECTS WHERE NAME=');
  Query2.SQL.ADD(Query1.FieldByName('Naimenovanie').AsString);
  Query2.SQL.ADD(' AND KURS=');
  Query2.SQL.ADD(IntToStr(Query1.FieldByName('Kurs').AsInteger));
  Query2.ExecSQL;
end;
Вот что получается когда использую допустим вот такой запрос..

0
 Аватар для arni
914 / 879 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
18.12.2013, 23:17
lev4ig, вы не ищите легких путей. Быть может проще вытащить в Query1 нужное ключевое поле K_DISC?
0
0 / 0 / 0
Регистрация: 22.05.2012
Сообщений: 14
18.12.2013, 23:47  [ТС]
Ну просто я не хочу чтобы оно выводилось в таблицу, пользователю ни к чему эта информация
Или можно как-то скрыть столбик из таблицы, но чтобы фактически он там был?
0
 Аватар для arni
914 / 879 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
19.12.2013, 08:10
Цитата Сообщение от lev4ig Посмотреть сообщение
Или можно как-то скрыть столбик из таблицы, но чтобы фактически он там был?
вы даже не поверите, как это просто: хоть на уровне датасета, хоть на уровне грида. Свойство Visible. Не забудьте только определить столбцы явно.
0
0 / 0 / 0
Регистрация: 22.05.2012
Сообщений: 14
19.12.2013, 19:49  [ТС]
Собственно чего я и добивался, сейчас буду пробовать, спасибо большое
0
0 / 0 / 0
Регистрация: 22.05.2012
Сообщений: 14
23.12.2013, 23:31  [ТС]
У меня новая проблема в общем..
 Комментарий модератора 
Для новой проблемы новый топик. Таковы правила!

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

Наше время: После решения проблем с удалением из таблицы, появилась проблема просмотра данных из таблицы после удаления, а точнее вылезает вот такая ошибочка:

Собственно запрос на просмотр:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm3.FormShow(Sender: TObject);
begin
with DataModule2 do
begin
Query1.Close;
query1.sql.clear;
Query1.SQL.Add('SELECT K_DISC, NAME as Naimenovanie, KURS as Kurs FROM SUBJECTS');
Query1.Open;
end;
DBGrid1.Columns.Items[1].Width := 200;
DBGrid1.Columns.Items[0].Visible:=false;
end;
0
0 / 0 / 0
Регистрация: 22.05.2012
Сообщений: 14
24.12.2013, 02:09  [ТС]
С той проблемой разобрался, поменял кодировку у всей базы и всё пошло как нужно.

Новая проблема:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
procedure TForm5.Button1Click(Sender: TObject);
begin
with DataModule2 do
begin
  Query2.Close;
  Query2.SQL.Clear;
  Query2.SQL.Add('SELECT COUNT (*) AS COUNT_1 FROM SUBJECTS WHERE (NAME="'+AnsiUpperCase(Trim(Edit1.Text))+'" AND KURS="'+Trim(ComboBox1.Text)+'");');
  Query2.Open;
  if Query2.FieldByName('COUNT_1').Value>0 then
      ShowMessage('Òàêàÿ äèñöèïëèíà óæå ñóùåñòâóåò!')
  else
    begin
      Query2.Close;
      Query2.SQL.Clear;
      Query2.SQL.Add('UPDATE SUBJECTS SET NAME = ');
      Query2.SQL.Add('"'+AnsiUpperCase(Trim(Edit1.Text))+'", KURS = "'+Trim(ComboBox1.Text)+'" WHERE K_DISC = ');
      Query2.SQL.Add(IntToStr(Query1.FieldByName('K_DISC').AsInteger));
      Query2.Open;
    end;
end;
Form5.Close;
Form3.Show;
end;
На этот код я получаю ошибку:
0
 Аватар для arni
914 / 879 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
24.12.2013, 08:35
Найдите, какая именно строка вызывает исключение.
Приведите полный текст запроса, который вы наклеили - в этом месиве кавычек и конкатенаций разобраться очень трудно. Вообще, сколько нибудь опытные программисты почти никогда не клеют запросы: они используют переменные (параметры).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.12.2013, 08:35
Помогаю со студенческими работами здесь

Delphi+InterBase
Здравствуйте, у меня пару вопросов касательно БД INTB+Delphi. 1) у меня есть Edit в него я вписываю название данных в определённом...

Delphi и InterBase
Delphi и IB. В программе должно присутствовать разграничение пользователей по правам. В IB создал к примеру роль Buh назначил ей права...

Interbase и SQL запрос
Скажите пожалуйста ввожу запрос create role admin authorization admin но мне выдает ошибку в 12 символе. Что не так? Как понимаю я создаю...

SQL - запросы (InterBase)
Работаю с базой данных типа InterBase

Подключение к InterBase из Delphi
Здравствуйте!!!!!!!!! Люди добрые Кто даст подробную инструкцию к подключению к InterBase из Delphi Требуется. 1) Подключится к...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru