|
7 / 7 / 0
Регистрация: 13.09.2009
Сообщений: 263
|
||||||
Перенос данных из одной DBGrid в другую23.07.2011, 16:09. Показов 12681. Ответов 22
Метки нет (Все метки)
Если так переносится только одна строка DBGrid1 первой формы Form1 в DBGrid1 второй формы Form2:
0
|
||||||
| 23.07.2011, 16:09 | |
|
Ответы с готовыми решениями:
22
Перенос данных из одной БД в другую Перенос данных из одной базы в другую Перенос данных из одной таблицы в другую |
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 23.07.2011, 16:45 | |
|
"Пробежкой" по датасету.
А можно скл-запросом. В целом проблема кажется сильно притянутой за уши ибо на кой ляд в базе две одинаковые таблицы ?
1
|
|
|
7 / 7 / 0
Регистрация: 13.09.2009
Сообщений: 263
|
||
| 23.07.2011, 19:03 [ТС] | ||
|
Мне нужно перенести несколько столбцов из одной таблицы в другую. Таблицы не одинаковые, но несколько столбцов одинаковых. Как сделать "Пробежку" по DataSet?
0
|
||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
||||||||||||||||
| 23.07.2011, 21:34 | ||||||||||||||||
begin first; while not eof do begin List1.Add(fieldbyname('...').AsString); ... next; end; end;
1
|
||||||||||||||||
|
19 / 19 / 0
Регистрация: 22.07.2011
Сообщений: 68
|
||||||
| 24.07.2011, 00:45 | ||||||
|
В идеале это делается либо, как уже сказали, конструкцией INSERT ... SELECT,
либо же, если не хочется дублировать данные (а в случае больших таблиц этого лучше не делать) - выбирать их соответствующими запросами (у тебя же есть поля, по которым записи таблицы1 ассоциируется с записями таблицы2), например:
1
|
||||||
|
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,256
|
||
| 24.07.2011, 05:47 | ||
|
1
|
||
|
2 / 2 / 0
Регистрация: 06.06.2011
Сообщений: 13
|
|
| 24.07.2011, 08:02 | |
|
begin
Form2.DBGrid1.DataSource.DataSet.First; Form2.DBGrid2.DataSource.DataSet.First; while not Form2.DBGrid1.DataSource.DataSet.Eof do begin Form2.DBGrid1.DataSource.DataSet.Insert; Form2.DBGrid1.DataSource.DataSet.FieldBy Name('Имя_поля').AsString:= Form2.DBGrid1.DataSource.DataSet.FieldBy Name('Имя_поля').AsString; Form2.DBGrid1.DataSource.DataSet.Post; Form2.DBGrid1.DataSource.DataSet.Next; Form2.DBGrid2.DataSource.DataSet.Next; end; НО!! Колличество записей DBGrid2 должно быть равно колиичеству записей DBGrid1 в данном случае, т.е (Form2.DBGrid1.DataSource.DataSet.Record Count= Form2.DBGrid2.DataSource.DataSet.RecordC ount) условие должно соблюдаться Иначе получите ошибку. У вас таблицы БД имеют одинаковое число записей? Если да, то это самый простой вариант. Добавлено через 2 минуты А если таблицы не одинаковы то надо как то проверять в какие конкретно записи второй таблицы нужно вставлять данные из другой. Добавлено через 4 минуты Например вот так: begin Form2.DBGrid1.DataSource.DataSet.First; while not Form2.DBGrid1.DataSource.DataSet.Eof do begin Form1.DBGrid2.DataSource.DataSet.First; while not Form1.DBGrid1.DataSource.DataSet.Eof do begin if True then /// здесь проверяем условие begin Form2.DBGrid1.DataSource.DataSet.Insert; Form2.DBGrid1.DataSource.DataSet.FieldBy Name('Имя_поля').AsString:= Form1.DBGrid2.DataSource.DataSet.FieldBy Name('Имя_поля').AsString; Form2.DBGrid1.DataSource.DataSet.Post; end; Form1.DBGrid1.DataSource.DataSet.Next; end; Form2.DBGrid2.DataSource.DataSet.Next; end;
1
|
|
|
7 / 7 / 0
Регистрация: 13.09.2009
Сообщений: 263
|
|||
| 24.07.2011, 12:06 [ТС] | |||
|
В общем есть таблица базы данных Товары. Днные этой таблицы отображаются в DBGrid1. DBGrid2 отображает данные Приходного кассового ордера. Т.е. заполняем приход товаров (какое-то n-е количество записей) и при нажатии Кнопки записи добавляются к существующим записям БД Товаров. Эти БД (Товары и Приход), почти одинаковые, но неодинаковые!!!
0
|
|||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
||||||
| 24.07.2011, 16:37 | ||||||
|
>Константин
Ладно бы, что ваш код просто постеснялся бы выложить любой мало-мальски программист-профи ибо он уродлив и выдает в Вас крутого новичка-ламера, ладно бы что код грешит кучей ошибок, но он ведь еще и банально некорректен. Т.е. просто не будет работать ибо алгоритмически неверен. Вот уж действительно иногда лучше жевать (с) Добавлено через 23 минуты
Первое. Ваша БД ни к черту не годится ибо спроектирована безобразно. Чтобы спроекттровать ее правильно, нужно составить МОДЕЛЬ базы данных, в которой прописать ОБЪЕКТЫ и СВЯЗИ между ними. Что касается торговли (у Вас ведь торговля или что-то связанное с нею), то обязательные объекты в этой предметной области: 1) Товар, имеющий характеристики: код, наименование, марка, срок годности, принадлежность к товарной группе, упаковка и т.д., цена (при средневзвешенном учете) или номер партии (при партионном учете) или и то илил другое (альернативно) если смешанный учет. Совокупность объектов образуют "Справочник Товаров" (не путать с ассортиментом, включающим только имеющиеся в наличии товаром) 2)Складская карточка, имеющая характеристики: ссылка на товар, текущий остаток, список ссылок на приходно-расходные накладные (движение), список сальдовых остатков (помесячно), указание на способ списания (FIFO,LIFO,иное - см. правила складского и бух.учета), информация о физическом месте хранения (зона, стеллаж, полка, блок ...) 3)Приходно-расходные документы (накладные - но никак не кассовые ордера - это Вам наврали, по ПКО ни один гвоздь ни один кладовщик никому не выдаст ), состоящие из двух "уровней": заголовка накладной (номер, дата, сумма, от кого получено или кому отпущено и т.д.) и состава (фактуры), перечисляющей позиции товара с указанием кол-ва, цены, НДС и т.д. 4)Контрагенты (поставщики и покупатели) с соотв. реквизитами.. 5)... Уф! Для самого простого учета этого наверно хватит, для полноценного "жизненного" варианта - много чего еще надо добавить. Проще взять 1С торговля и просто посмотреть как там все сделано - лучше всякого учебника ![]() Второе. Без полной переделки и всей базы и Вашей "проги" (которую дучше всего просто выбросить чтобы не мучиться - все равно ничего из написанного вней не пригодится) И эта.. ВЫБРОСИТЬ ПАРАДОКС И БДЕ !!!! И писать сразу для скл-сервера ибо НОРМАЛЬНО РАБОТАЮЩАЯ МНОГОПОЛЬЗОВАТЕЛЬСКАЯ СКЛАДСКАЯ ПРОГРАММА НА БАЗЕ ПАРАДОКС - это нынче реликт почище откопанного в снегах мамонтенка. По определению парадокс не может работать нормально (вообще-то может, конечно, но для этого надо приложить много рук и мозга, не опошленного архангельскими)! Третье. А чего бы Вам вот взять и тупо не купить 1С ? И не мучиться.
2
|
||||||
|
7 / 7 / 0
Регистрация: 13.09.2009
Сообщений: 263
|
|
| 24.07.2011, 17:02 [ТС] | |
|
MsGuns, всё конечно замечательно и я сама знаю, что на 1С написать эту программу гораздо быстрее, проще и удобнее
))Но дело в том, что это типа курсовая работа, с данной темой, которую нужно писать именно на Delphi и SQL Server. Мне не нужна какая-то сильно сложная, хорошая и очень грамотно написанная программа. К тому же эту программу сильно смотреть никто не будет... Я пытаюсь её сделать как можно проще и наиболее быстрыми путями, поэтому оно всё вот так =))
0
|
|
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 24.07.2011, 17:37 | |
|
Так вот, много грамотнее и ПРАВИЛЬНЕЕ было бы спроектировать модель документооборота и предметную модель БД (как производную от документооборота). Уже на основании этих моделей составить схему данных, после чего "слепить" саму БД по готовой схеме и "дурак" сможет. Т.е сама программа и не нужна вовсе. Если есть БД и ее бизнес-логика (по сути и образующих схему данных), то программирование уже дело вторичное. Вот такая дипломная работа ИМХО ценна хотя бы потому, что показывает навыки ее автора в проектировании реальных бизнес-процессов, а значит и готовность его (ее) к активной работе в этой области.
Но если у Вас иная задача - показать навыки именно в программировании пользовательского ПО для работы с базами данных по технологии КС,- тогда наверное другое дело.. Тогда пофих что там у вас, товар или аккоунт, бизнес или социология.. Хотя как на мой непросвещенный взгляд, истинный программист - это тот, кто прежде всего в состоянии разобраться в любой предметной области, разложить там все по полочкам, найти "узкие" места и предложить способ их решения. А вовсе не тот, кто умеет кидать батоны на форму..
1
|
|
|
7 / 7 / 0
Регистрация: 13.09.2009
Сообщений: 263
|
||
| 25.07.2011, 10:56 [ТС] | ||
|
Мне нужно нечто среднее, т.е. показать навыки и в базах данных и в программировании ПО.
Ладно... Спасибо! Добавлено через 16 часов 48 минут Кстати, не смотря на всё выше написанное, тема по прежнему остаётся актуальной. Мне всё ещё надо узнать, как перенести столбец одного DBGrid в другой.
0
|
||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 26.07.2011, 10:17 | |
|
Кстати несмотря на все выше написанное, Вы так и не удосужились внятно объяснить что подразумевается под фразой "перенести столбец из одного DBGrid в другой". При этом желательно в терминах не экселя, а либо БД (если дело в переносе информации из одной таблицы в другую), либо визуальных компонент (если вопрос в простом добавлении в грид новой колонки для отображения уже имеющегося поля датасета, который этот грид отображает)
Добавлено через 6 минут А лучше всего описать задачу в терминах "сторожей и уборщиц", так будет лучше всего (заодно научитесь ясно для оппонента формулировать свои мысли).
0
|
|
|
7 / 7 / 0
Регистрация: 13.09.2009
Сообщений: 263
|
|||||||||||
| 26.07.2011, 10:36 [ТС] | |||||||||||
|
Надеюсь, в таком виде будет более ясно:
В БД у меня есть 2 таблицы tabl1 и tabl2. В tabl1 поля: a, a1, a2, a3; В tabl2 Поля: b, a1, a2, b3. Как запросом скопировать все записи из столбцов a1 и а2 таблицы tabl1 в a1 и a2 tabl2? Нужно не сформировать эту вторую таблицу типа:
Нужна процедура для кнопки первой формы, на которой находится DBGrid, отражающая данные tabl1. При нажатии кнопки, записи столбцов переносятся в таблицу tabl2, которая отражается на второй форме Form2.DBGrid. Не получается составить нормальные запрос в процедуре к кнопке. У меня это выглядит так, но ...
Да и к тому же эта процедура не работает, она выдаёт ошибку.
0
|
|||||||||||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
||||||||||||||||
| 26.07.2011, 11:10 | ||||||||||||||||
|
Запросом:
Методами TDataSet:
Как Вы догадались, я умышленно вместо Query употребил ADODataSet ибо так методологически правильнее ! Но Вы, конечно, можете оставить свой любимый "кверик" - в этом случае просто везде в коде поменяйте "DataSet" на "Query" - все будет весело бегать ![]() Добавлено через 6 минут И еще важно ! Не употребляйте все эти Query1, Table4, Form1 и т.д. Даже в таком микроскопическом коде, что я Вам привел, такая нотация приводит к мельтешению в глазах, значительно затрудняя чтение кода. Если сзделать некоторые замены, код просто преобразится и будет "ласкать" глаз. Попробуйте зделать такие замены:
Вы убедитесь насколько я прав
1
|
||||||||||||||||
|
19 / 19 / 0
Регистрация: 22.07.2011
Сообщений: 68
|
||||||
| 26.07.2011, 11:22 | ||||||
|
если я не ошибаюсь, ты забыла вызвать метод SQL.Open
если у тебя во второй таблице есть столбец, куда надо пихать значения из первого, наверное, придется делать так:
1
|
||||||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
||||||
| 26.07.2011, 11:56 | ||||||
0
|
||||||
|
7 / 7 / 0
Регистрация: 13.09.2009
Сообщений: 263
|
|
| 26.07.2011, 11:56 [ТС] | |
|
0
|
|
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 26.07.2011, 12:00 | |
|
Ошибка значит то, что залюбовавшись Вашим аватарчиком (хочется верить, что это непосредственно Вы в реале), я напрочь позабыл, что в дельфи в отличие от си для присвоения надоть употреблять двоеточие перед равенством
1
|
|
|
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,256
|
||
| 26.07.2011, 12:07 | ||
|
0
|
||
| 26.07.2011, 12:07 | |
|
Помогаю со студенческими работами здесь
20
Перенос данных из одной таблицы в другую Перенос данных из одной таблицы в другую Firebird 2.1.Перенос данных из одной таблицы в другую. Кнопки: перенос данных из одной таблицы в другую Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|