powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Работа cxGrid
13 сообщений из 13, страница 1 из 1
Работа cxGrid
    #39793672
FOGOT-BAstA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день! Не могу победить пару моментов при работе с cxGrid. Подскажите кто в курсе:
1. Имеются 2 мастер-детайл таблицы Изделие и детали для его ремонта. Связь по ключу. Создал две View. Во второй подчинённой прописал ключи мастера и детайла. Всё работало, но тут обнаружил, что если хочу в старую запись добавить еще деталь, то он её добавляет в базу, но после перезапуска не отображает, хотя в БД она есть. Не знаю даже куда копать и почему так...поигрался с ключами в View - не помогло, в настройках отображения тоже ничего подходящего не нашёл...
2. В той же таблице в мастер View пытаюсь сделать кнопку добавления всех возможных деталей. Создал столбец cxGrid2DBTableView1Column2 в Properties задал тип ButtonEdit, кинул на форму TActionList, создал в нём Action1 с кодом:
Код: sql
1.
2.
3.
4.
5.
6.
if(ADOQuery4.Active)
then ADOQuery4.Close;
ADOQuery4.SQL.Clear;
ADOQuery4.SQL.Add(('SELECT 57, Detail, Dec_Nomer_Detail, '',1 FROM Detail a WHERE a.Naimenovanie=''Пломба электронная ПЭ'' ORDER BY Naimenovanie');
ADOQuery4.Open;
ADODataSet4.Refresh;


Запрос в SQL отрабатывает нормально, а вот в delphi выдаёт ошибку:
"Неправильный синтаксис около конструкции "электронная"". И так любое существующее в базе название подставляешь он пишет что неправильный синтаксис около одного слова...
Через отладчик увидел странные символы в строке - #$D#$A. Насколько понял из инета они не влияют. StringReplace их не убрало.
Использовал параметры-не помогло...В остальных частях проекта везде такая конструкция работает на ура...Связываю с cxGrid...
Буду очень признателен за помощь))
...
Рейтинг: 0 / 0
Работа cxGrid
    #39793707
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FOGOT-BAstAЗапрос в SQL отрабатывает нормально

что конкретно это значит ?

FOGOT-BAstAв delphi выдаёт ошибку

что конкретно это значит? Delphi большой....


FOGOT-BAstAпри работе с cxGrid
FOGOT-BAstAсоздал в нём Action1 с кодом:
Код: sql
1.
if(ADOQuery4



ADOQuery4 совсем не похоже на cxgrid


FOGOT-BAstA
Код: sql
1.
ADOQuery4.SQL.Add(('.......');



Это ненастоящий код. У вас какой-то другой.


FOGOT-BAstA
Код: sql
1.
'SELECT 57, Detail, Dec_Nomer_Detail, '',1 FROM Detail



если бы вы ВСЕ строки поменяли на параметры, а не некоторые - то наверное помогло бы
...
Рейтинг: 0 / 0
Работа cxGrid
    #39793710
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FOGOT-BAstAотладчик увидел странные символы в строке - #$D#$A

самые обычные символы

https://ru.wikipedia.org/wiki/Перевод_строки
https://ru.wikipedia.org/wiki/Возврат_каретки

Они вставляются после первой строки перед второй строкой. Они их разделяют.

Код: pascal
1.
2.
ADOQuery4.SQL.Text := 'SELE.....anie';
ADOQuery4.Open;



все остальные команды - лишние.
...
Рейтинг: 0 / 0
Работа cxGrid
    #39794478
FOGOT-BAstA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochчто конкретно это значит ?[/src]
В редакторе запросов SQL SMS запрос
Код: sql
1.
SELECT 57, Detail, Dec_Nomer_Detail, '',1 FROM Detail a WHERE a.Naimenovanie=''Пломба электронная ПЭ'' ORDER BY Naimenovanie


выполняется без ошибок и выдаёт необходимый набор данных...еще раз скажу, что изначально это запрос на INSERT , просто именно в SELECT'е часть не работает!

Ariochчто конкретно это значит? Delphi большой....
Delphi 10 Seattle. Запущенное приложение. При нажатии на кнопку в строке cxGrid'a выдаёт описанную ошибку...

AriochADOQuery4 совсем не похоже на cxgrid
Согласен...

AriochЭто ненастоящий код. У вас какой-то другой.
Не согласен...

Ariochесли бы вы ВСЕ строки поменяли на параметры, а не некоторые - то наверное помогло бы
Зачем менять значение на параметр если оно не меняется? Но отчасти Вы правы, это была проблема второго вопроса - неправильные кавычки, надо было двойные ставить...

Первый еще актуален, опять что-нибудь накосячил...)))
...
Рейтинг: 0 / 0
Работа cxGrid
    #39794560
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FOGOT-BAstAВ редакторе запросов SQL SMS запрос

а это другой запрос
вы не смогли правильно его перевести в константу Delphi
место явной ошибки я вам показал

FOGOT-BAstAНе согласен...

Я ведь не просто так процитировал - там явная ошибка, такой код, который вы нам показываете - не то, что работать не будет, он не скомпилируется даже.
Т.е. в программе у вас один код, а на форуме другой

FOGOT-BAstAЗачем менять значение на параметр если оно не меняется?
1. Ну например, чтобы вот таких косяков не было в принципе
Также чтобы был везде четкий контроль типов, однозначная трактовка типов (те же даты текстом - европейская или американская конвенция? подключился к дргуому серверу - и вдруг смысл запроса изменился).

2. Сегодня не меняется, завтра меняется, послезавтра меняется ползователем, через неделю - SQL injection и вся база в чужих руках.

Собственно сам пишешь - уже меняется.

FOGOT-BAstAИ так любое существующее в базе название подставляешь

P.S. в целом рекомендую прочувствовать такие тексты
https://www.chiark.greenend.org.uk/~sgtatham/bugs-ru.html
https://sitengine.ru/smart-question-ru.html#symptoms

чтобы с одной стороны убирать не важные детали
с другой - полностью описывать важные
...
Рейтинг: 0 / 0
Работа cxGrid
    #39794561
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FOGOT-BAstAхотя в БД она есть.

как проверяете, что есть?

какие данные у новой и старой детали? - столбец за столбцом сравнивайте

сделайте запрос мастер-деталь в SQL SMS и смотрите, что получится

если возможно - должно быт ькак-то возможно - вытаскивайте запрос, который "девки" создают и сравнивайте со своим

у вас либо непонятки с "девками", либо с содержимы БД, либо в SQL-запросом
будете в кучу валить - не разгребётесь.
надо по-отдельности проверять
...
Рейтинг: 0 / 0
Работа cxGrid
    #39795779
FOGOT-BAstA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch как проверяете, что есть?

Захожу в SQL SMS делаю запрос на выборку всех деталей по ID изделия и вижу, что в базе больше, чем отражается в приложении. Причём видно, что отображаются записи, которые по-порядку вначале создал, а последняя, которую через месяц добавил, уже нет.
Вот скрины сделал, что в моём приложении отображается и что в SMS...

Ariochесли возможно - должно быт ькак-то возможно - вытаскивайте запрос, который "девки" создают и сравнивайте со своим
CxGrid берёт из DataSource подключённого к таблице БД через ADODataSet (тип таблица). Фильтраций нет никаких...

Ariochу вас либо непонятки с "девками", либо с содержимы БД, либо в SQL-запросом
будете в кучу валить - не разгребётесь.
надо по-отдельности проверять
Ну раз в базе данные есть, а в cxGrid'е нет, значит либо баг девки, либо настройки девки/датасета, либо где-то код лишний - вообще всё закоментил на форме - баг остался...
...
Рейтинг: 0 / 0
Работа cxGrid
    #39795782
FOGOT-BAstA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скрин запроса SQL SMS
...
Рейтинг: 0 / 0
Работа cxGrid
    #39795836
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для правильной работы Master-Details датасет Details должен быть отсортирован по IdMaster
...
Рейтинг: 0 / 0
Работа cxGrid
    #39795841
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Работа cxGrid
    #39795853
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может стоит переложить master-detail связку на датасеты, ну пусть detail переоткрывается с новым id, а дочерняя view просто отображает данные в нем? ну что-то вроде куска кода ниже, не оптимизировано и кривовато но как бы работает


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
procedure TReestr.grdvReestrDataControllerDetailExpanded(
  ADataController: TcxCustomDataController; ARecordIndex: Integer);
var
  v: Variant;
  idschet, idcase: integer;
  Id: LargeInt;
  Controller: Tcxgriddbdatacontroller;
begin
  inherited;
  try
    v := ADataController.GetRecordId(ARecordIndex);
    Controller:= Tcxgriddbdatacontroller(ADataController);
    Controller.BeginLocate;
    if Controller.DataSet.Locate(Controller.KeyFieldNames, v, []) then
    begin
      Id:= Controller.DataSet.FieldByName('Id').AsLargeInt;
      if qAnamnez.Active then qAnamnez.Close;
      qAnamnez.ParamByName('Id').AsLargeInt:= qReestr.FieldByName('Id').AsLargeInt;
//    qAnamnez.Open;
    end;
  finally
    ADataController.FocusedRecordIndex := ARecordIndex;
    Controller.EndLocate;
    qAnamnez.Open;
  end;
end;
...
Рейтинг: 0 / 0
Работа cxGrid
    #39795921
ambarka_max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
C Кавычками то аккуртанее, это не тот орган где можно бездумно туда сюда кавычки лепить.
на SQL уходит команда:
Код: sql
1.
SELECT 57, Detail, Dec_Nomer_Detail, ',1 FROM Detail a WHERE a.Naimenovanie='Пломба электронная ПЭ' ORDER BY Naimenovanie


Выполните и получите
Код: sql
1.
2.
3.
4.
5.
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near 'электронная'.
Msg 105, Level 15, State 1, Line 1
Unclosed quotation mark after the character string ' ORDER BY Naimenovanie
'.
...
Рейтинг: 0 / 0
Работа cxGrid
    #39796188
FOGOT-BAstA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем огромное спасибо за помощь! DimaBr и Arioch отдельное)) Вопросы как обычно были в моей внимательности!!
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Работа cxGrid
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]