sibprogsistem wrote:
Alfil wrote:

Между делом возник еще такой вопрос: Возможно ли сделать что б при открытии формы все записи в таблице по умолчанию  были выбраны?

   

procedure Form1_OnShow (Sender: TObject; Action: string);
var
i: integer;
begin
  for i:=0 to Form1.TableGrid1.RowCount-1 do
    Form1.TableGrid1.Row[i].Selected := True ;

end;

Спасибо!

sibprogsistem wrote:
procedure Form1_Button2_OnClick (Sender: TObject; var Cancel: boolean);
var
i: integer;
begin
  for i:=0 to Form1.TableGrid1.RowCount-1 do
    if Form1.TableGrid1.Row[i].Selected then
      SQLExecute('INSERT INTO b(bb)VALUES("'+ IntToStr(Form1.TableGrid1.Row[i].ID) +'")');

  UpdateDataBase('b');
end;

Да код работает. Сохранил себе. Но возникла проблема уже в другом - оказывается что выдергивается Id другой таблицы (KomList - на скрине можно увидеть) а возможно выдернуть ID Book оттуда? Возможно вопрос глупый и это уже где то обсуждалось, но я, к сожалению, не нашел. Я пока еще пытаюсь только разобраться в этом всем. Как выдернуть с помощью переменной я, вроде бы, понял, но как совместить переменную и данный цикл - пока не понимаю.
Если же вставляю переменную

var
    i,:integer;
    IDbook: string;
begin
    for i:=0 to Komlist.Book.RowCount-1 do
       if  Komlist.Book.Row[i].Selected then
           IDbook:= SQLExecute('SELECT id_Book FROM KompList WHERE id='+ IntToStr(Komlist.Book.Row[i].ID));
           SQLExecute('INSERT INTO Dolgi(id_Chitately, id_Book) VALUES ("'+Komlist.ComChit.sqlValue+'","'+IDbook+'")');
       Dolg.TableGrid1.dbUpdate;
end;

то записывается только одна строка
Дополнено: Это я глупый и невнимательный! Забыл что цикл завершается на ";". Заключил цикл в begin - end; Все заработало! Огромное спасибо за IntToStr(Komlist.Book.Row.ID !! так теперь это выглядит

var
    i,:integer;
    IDbook: string;
begin
    for i:=0 to Komlist.Book.RowCount-1 do
       if  Komlist.Book.Row[i].Selected then
           begin
              IDbook:= SQLExecute('SELECT id_Book FROM KompList WHERE id='+ IntToStr(Komlist.Book.Row[i].ID));
              SQLExecute('INSERT INTO Dolgi(id_Chitately, id_Book) VALUES ("'+Komlist.ComChit.sqlValue+'","'+IDbook+'")');
           end;
       Dolg.TableGrid1.dbUpdate;
end;

Между делом возник еще такой вопрос: Возможно ли сделать что б при открытии формы все записи в таблице по умолчанию  были выбраны?

sibprogsistem wrote:
Alfil wrote:

Новый вопрос: Как сделать что б в случае пустого combobox на нем всплывало сообщение о том что он обязателен для заполнение, такое же как всплывает над пустым TextBox, обязательным для заполнения. Сейчас при пустом просто вылетает ошибка

ShowHint(component,'message');

Спасибо огромное!

Good afternoon.
The form 'Komlist' has a table 'Book' with the parameter 'goMultiSelect - true'. It is necessary to write all the rows selected in this table to the 'Dolgi' database table in one action. With the help of articles on this forum, a script of the following type was assembled:

var
    i,:integer;
begin
    for i:=0 to Komlist.Book.RowCount-1 do
       if  Komlist.Book.Row[i].Selected then
           SQLExecute('INSERT INTO Dolgi(id_Chitately, id_Book) VALUES ("'+Komlist.ComChit.sqlValue+'","'+Komlist.Book.sqlValue+'")');
       Dolg.TableGrid1.dbUpdate;
end;

The cycle works, the required number of records is created, but all records are the same, that is, the rows are not sorted out, but the last selected one is simply used. How to fix it?

k245 wrote:

Вам нужно пробежать в цикле по таблице с мультиселектом, и для каждой выделенной строки выполнить свою SQL-команду INSERT.

Сам я в Delphi ноль, с помощью гугла и форума состряпал вот такую конструкцию:

var
i,:integer;
begin
    for i:=0 to Komlist.Book.RowCount-1 do
       if  Komlist.Book.Row[i].Selected then
           SQLExecute('INSERT INTO Dolgi(id_Chitately, id_Book, KolVid, Ost, DVid, DVozv) VALUES ("'+Komlist.ComChit.sqlValue+'","'+Komlist.Book.sqlValue+'","'+Komlist.KVid.Text+'", "'+Komlist.Kost.Text+'", '+Komlist.DateVid.sqlDate+', '+Komlist.DateVozv.sqlDate+')');
       Dolg.TableGrid1.dbUpdate;
end;

Несколько записей содаются, то есть цикл работает, но эти записи одинаковы, то есть перебора строк не происходит.... Подскажите, пожалуйста, что тут нужно добавить для перебора.
И еще вопрос - есть ли возможность установить у таблицы свойство, что б по умолчанию были выбраны все строки?
Вопрос решен http://myvisualdatabase.com/forum/viewtopic.php?id=8059
Спасибо k245 и sibprogsistem!

Добрый день
Имеется "таблица БД А" с данными о предметах, "таблица базы данных B", в которой формируются комплекты с предметами из таблицы А и "таблица базы данных C", в которую нужно записать на человека все предметы, входящие в определенный комплект из "таблицы Б".
У таблицы в форме, с которой должна происходить запись в "таблицу C", установлен параметр goMultiSelect - True, но как его правильно использовать что б одновременно записать выбранные строки из этой таблицы я так и не понял - проходит только одна строка, при этом id "таблицы А" не подцепляется, соответственно данные из "таблицы А" не переносятся в таблицу - вместо них пустота.
Подскажите как это правильно сделать.
Дополнено:
Удалось выдернуть id и записать в таблицу скриптом с помощью переменной

var IDbook: string;
begin
   IDbook:= SQLExecute('SELECT id FROM KompList WHERE id='+Komlist.Book.sqlValue);
   SQLExecute('INSERT INTO Dolgi(id_Chitately, id_Book, KolVid, Ost) VALUES ("'+Komlist.ComChit.sqlValue+'","'+IDbook+'","'+Komlist.KVid.Text+'", "'+Komlist.Kost.Text+'")');
   Dolg.TableGrid1.dbUpdate;
end;

Как провести такой финт над всеми выбранными строками разом?

В общем решил проблему избавившись от колонки "nachkol" (оформим как первый приход) и на клавишу закрытия формы добавления прихода навесив команду типа

SQLExecute('UPDATE TabA SET nal=(SELECT TOTAL(TabB.Kol) FROM TabB WHERE TabB.id_TabA=TabA.id)');

Новый вопрос: Как сделать что б в случае пустого combobox на нем всплывало сообщение о том что он обязателен для заполнение, такое же как всплывает над пустым TextBox, обязательным для заполнения. Сейчас при пустом просто вылетает ошибка

Добрый день.
Имеются 2 связанные таблицы БД, например назовем их "TabA" и "TabB".
В TabA есть колонки: наименование ( например "naim"), начальное кол-во (nachkol) и наличие (nal)
В TabB есть колонки: связь с TabA (id_TabA), номер документа прихода (docs), и кол-во (Kol)

Пример таблицы с занесенными данными для лучшего понимания:

TabA                                TabB
| naim  | nachkol | nal |     | docs |  id_TabA  | kol |
------------------------------     ------------------------------
AA       |   0         |        |    | DA    | TabA.AA  |  3   |
BB       |   2         |        |    | DA    | TabA.BB  |  2   |
CC       |   1         |        |    | DB    | TabA.CC |  1   |
                                         | DC    | TabA.BB |  4   | 
                                         | DC    | TabA.CC |  1   |

Вопрос: Нужно подсчитать сумму по приходу соответствующего наименования в TabB, сложить с TabA.nachkol и записать в TabA.nal. Как это лучше сделать? Вычисляемое поле не лучший вариант, так как запись в TabA.nal нужна для последующих вычислений, а вычисляемое поле эту возможность, как я понял, не дает.
Пробовал собирать команду скрипта по кусочкам, основываясь на ответах в данном форуме, но я, видимо, или дурак или что-то совсем не так понимаю, так как результата за 2 дня ровно ноль (не считая кучу просмотренных сообщении о разных ошибках). Максимум чего добился, это получил в вычисляемом полу сумму командой SELECT TOTAL(Prih.KolPr) FROM Prih WHERE Prih.id_Book=Book.id
Помогите решить проблему, то уже в голове все перемешалось, сообразить не могу куда щемиться (

sibprogsistem wrote:
Alfil wrote:

запись проискодит только если в этот момент активна таблица, то есть если фокус при нажатии клавиши "добавить" находится на SearchPrihTab.


видимо что-то у Вас не корректно настроено..
если не найдете, то сделайте глобальную переменную и при клике по ячейке заполняйте переменную и потом используйте ее в создании записи

Спасибо. Попробую

sibprogsistem wrote:

а вообще получать id таким способом не обязательно так как sqlValue содержит этот самый id
можно записать так

SQLExecute('INSERT INTO Prih(KolPr, id_Docs, id_Book) VALUES ("'+PrihForm.KolPr.Text+'","'+PrihForm.CombDocs.sqlValue+'","'+PrihForm.SearchPrihTab.sqlValue+'")'); //Запись в Prih

Спасибо, данный вариант срабатывает, но с одним моментом - запись проискодит только если в этот момент активна таблица, то есть если фокус при нажатии клавиши "добавить" находится на SearchPrihTab. Если же после выбора записи в таблице выбрать другим элементы (например выбрать документ или поставить количество) то вылетает ошибка "Not Null constraint failed: Prih.id_Book" и сообщение "INSERT INTO "Prih" ("id_Book","id_Docs",KolPr") VALUES (NULL, 1, '3'), то есть, похоже, он не может получить id_Book.
Буду гуглить как сделать что б она оставалась в фокусе постоянно либо получить другим образом этот id_Book
Ну и вывод как на первом скриншоте с отображением всех записей упомянутых в таблице Autor остался. Тут уже с самой таблицей нужно разбираться похоже. Либо это баг...

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

Скриншот ошибки со скриптом

Скриншот при добавлении без скрипта

Добрый день
Возникла проблема с сохранением записи в таблицу из формы.
При попытке использовать штатные средства для записи из таблицы "SearchPrihTab" в форме, в таблицу sql "Prih" переносится не только нужная запись, но и ВСЕ позиции из привязанной таблицы ("Autors")
Попробовал сделать это через скрипт, но получил ошибку "INSERT INTO Prih (KolPr, id_Docs, id_Book) VALUES ("3"," "," ")"
Я так понимаю что не понимает что вставлять в "id_Docs" и "id_Book"
Уже 3 дня пытытаюсь решить проблему, но получается как-то не очень. Ткните носом в  ошибку. Сам я в скриптах, да и в sql b delphi ноль, пытаюсь разобраться с помощью гугла и документции, но пока результатов маловато.
.
Дополнено
В общем, таковы результаты рабочего дня:

1: Фокус с таблицы SearchPrihTab слетает при двойном клике на ней, который делается для добавления пунктов записи из таблицы на другие элементы формы, дальнейшего вычисления и отображения внутри формы общего количества экземпляров (Book.Kol) после прихода и последующего обновления этой записи в базе Book. Если после двойного клика снова выбрать необходимую запись в SearchPrihTab то запись в базу Prih проходит нормально, но это не вариант, нужно что то придумывать ( Либо вычислять другим способом, либо как то прописывать что б фокус после двойного клика не слетал (

2. Таблица не отображает записи, если они не связаны напрямую с базой, с которой считываются записи. То есть у меня базы авторов(Autor) и издательств (IsdatTab) привязаны к базе книг (Book), а уже Book привязана к Prih и соответственно Autor и IsdatTab либо не отображаются таблицей, либо вообще не записываются в Prih (пока не понял). Можно конечно связать дополнительно Autor и IsdatTab с Prih и при сохранении в Prih выбирать элементы формы в которых эта запись в наличии (например комбобокс, по которому происходит поиск по авторам), но это, блин, костыль.