powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Создание дубля строки в таблице
25 сообщений из 36, страница 1 из 2
Создание дубля строки в таблице
    #39827480
Spartak19
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!
Подскажите логику решения следующей задачи.
Имеется две таблицы, нужно по строчно их сравнить, если строка первой таблицы совпадает(два столбца из всей строки) с строкой второй таблицы(с двумя столбцами второй таблицы), тогда во второй таблице под строкой в которой нашлись совпадения надо создать ее дубликат, не удаляя оригинала и т.д по всей таблице. Набросал код, посмотрите что не так

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Dim table2 As New DataTable
        Dim table1 As New DataTable
        Dim c As Integer
        Dim toinsert As DataRow = table2.newrow
        Dim s As Integer
        For i = 0 To table1.Rows.Count - 1
            If table1.Rows(i).Item(0).ToString = DBNull.Value.ToString Then
            Else
                For i2 = 0 To table2.Rows.Count - 1
                    If table2.Rows(i2).Item(0).ToString = DBNull.Value.ToString Then
                    Else
                        If table1.Rows(i).Item(0).ToString = table2.Rows(i2).Item(0).ToString Then table2.Rows.InsertAt(toinsert, 1)
                        c -= 1
                    End If
                Next
            End If
        Next
...
Рейтинг: 0 / 0
Создание дубля строки в таблице
    #39827501
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Spartak19посмотрите что не так
Всё не так. Такие вещи делаются на сервере, скриптом или внутри ХП, в одной транзакции.
...
Рейтинг: 0 / 0
Создание дубля строки в таблице
    #39827509
Spartak19
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сон Веры Павловны, Путь решения в данном случае только через Datatable, если можете, подскажите как организовать верный цикл проверки
...
Рейтинг: 0 / 0
Создание дубля строки в таблице
    #39827525
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Spartak19,
попробуйте через LINQ.
...
Рейтинг: 0 / 0
Создание дубля строки в таблице
    #39827907
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
vb_subSpartak19,
попробуйте через LINQ.
С тем же успехом можно посоветовать через циклы
...
Рейтинг: 0 / 0
Создание дубля строки в таблице
    #39827911
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Spartak19,

Вы расскажите задачу, а не как Вы придумали ее решить. Потому что решаете вы ее как-то коряво.
Дубль строки нужен же не просто так?
...
Рейтинг: 0 / 0
Создание дубля строки в таблице
    #39827952
Spartak19
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cat2,
Надо сравнить две таблицы по строчно, если данные в строках совпадают(точнее в двух ячейках) между двумя таблицами, тогда в таблице 2, создаем ниже копию этой совпавшей строки, при этом не удаляем оригинал, нужно это для того чтобы до заполнить данными появившиеся новые строки, при этом оставив оригинал не тронутым
...
Рейтинг: 0 / 0
Создание дубля строки в таблице
    #39828108
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Spartak19Cat2,
Надо сравнить две таблицы по строчно, если данные в строках совпадают(точнее в двух ячейках) между двумя таблицами, тогда в таблице 2, создаем ниже копию этой совпавшей строки, при этом не удаляем оригинал, нужно это для того чтобы до заполнить данными появившиеся новые строки, при этом оставив оригинал не тронутым
Это не задача, это как Вы придумали ее решать.
Для чего нужно дубликаты-то создавать?
...
Рейтинг: 0 / 0
Создание дубля строки в таблице
    #39828192
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не вижу, как поменяется ИД

а вообще алгоритм полный отстой, будет работать очень медленно уже для хотя бы пары тысяч строк, не говоря про сотню тысяч
...
Рейтинг: 0 / 0
Создание дубля строки в таблице
    #39828205
Spartak19
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andreymx,
нужно делать без циклов?
...
Рейтинг: 0 / 0
Создание дубля строки в таблице
    #39828241
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Spartak19andreymx,
нужно делать без циклов?как уже говорила группа товарищей, через БД


если же хочешь именно изврат и циклом - подумай о кардинальных методах ускорения процесса
например, можно в Dictionary записать конкатенацию двух полей первой таблицы и как значение - ИДшник
а потом второй таблицей искать значение в Dictionary и т.д.
...
Рейтинг: 0 / 0
Создание дубля строки в таблице
    #39828274
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx,

зачем делать конкатенацию 2 полей, если можно хранить структуру из 2 полей в виде ключа справочника?
...
Рейтинг: 0 / 0
Создание дубля строки в таблице
    #39828371
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesandreymx,

зачем делать конкатенацию 2 полей, если можно хранить структуру из 2 полей в виде ключа справочника?в диктионари? У меня не получалось, но я глубоко не рыл
...
Рейтинг: 0 / 0
Создание дубля строки в таблице
    #39828403
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx,

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
        class Person
        {
            public string Name { set; get; }
            public int Age { set; get; }
            public double Weight { set; get; }
        }
        private void Example()
        {
            var persones = new[]
            {
                new Person { Name = "A", Age = 1, Weight = 3.0 },
                new Person { Name = "B", Age = 2, Weight = 4.0 },
                new Person { Name = "C", Age = 3, Weight = 5.0 },
            };

            var dict = persones.ToDictionary(p => new { p.Name, p.Age });
            if (dict.TryGetValue(new { Name = "A", Age = 1 }, out var person))
            {

            }
        }


У анонимных типов методы эквивалентности и получения хеш кода переопределены
...
Рейтинг: 0 / 0
Создание дубля строки в таблице
    #39828503
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то у ТС VBA
...
Рейтинг: 0 / 0
Создание дубля строки в таблице
    #39828514
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxВообще-то у ТС VBA
часом не перепутал VB.NET с VBA?
...
Рейтинг: 0 / 0
Создание дубля строки в таблице
    #39828521
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилandreymxВообще-то у ТС VBA
часом не перепутал VB.NET с VBA?сорри, возможно
...
Рейтинг: 0 / 0
Создание дубля строки в таблице
    #39828963
Spartak19
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что примерно должно получится, подскажите как это реализовать через цикл или есть более правильный способ
...
Рейтинг: 0 / 0
Создание дубля строки в таблице
    #39828965
Spartak19
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Spartak19,
Сделал так, но всегда есть лишнии строки


Dim toinsert As DataRow = table3.NewRow
Dim s As Integer
For i = 0 To table1.Rows.Count - 1
If table1.Rows(i).Item(3).ToString = DBNull.Value.ToString Then
Else
For i2 = 0 To table2.Rows.Count - 1
If table2.Rows(i2).Item(3).ToString = DBNull.Value.ToString Then
Else
If table1.Rows(i).Item(3).ToString = table2.Rows(i2).Item(3).ToString Then s = s + 1
table3.ImportRow(table2.Rows(i2))
End If
Next
End If
Next
MsgBox(s)
DataGridView3.DataSource = table3
...
Рейтинг: 0 / 0
Создание дубля строки в таблице
    #39828966
Spartak19
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Spartak19,

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
  Dim toinsert As DataRow = table3.NewRow
        Dim s As Integer
        For i = 0 To table1.Rows.Count - 1
            If table1.Rows(i).Item(3).ToString = DBNull.Value.ToString Then
            Else
                For i2 = 0 To table2.Rows.Count - 1
                    If table2.Rows(i2).Item(3).ToString = DBNull.Value.ToString Then
                    Else
                        If table1.Rows(i).Item(3).ToString = table2.Rows(i2).Item(3).ToString Then s = s + 1
                        table3.ImportRow(table2.Rows(i2))
                    End If
                Next
            End If
        Next
        MsgBox(s)
        DataGridView3.DataSource = table3
...
Рейтинг: 0 / 0
Создание дубля строки в таблице
    #39828986
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Spartak19Что примерно должно получится
Ну это ж банальный outer join:
Код: sql
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.
declare
  @t1 table (
    fruit varchar(10) not null,
    sort varchar(10) not null,
    [all] int not null
  );
insert into @t1 values
  ('Яблоки', 'Желтый', 8),
  ('Яблоки', 'Желтый', 10),
  ('Яблоки', 'Красный', 5),
  ('Яблоки', 'Высший', 4);
declare
  @t2 table (
    fruit varchar(10) not null,
    sort varchar(10) not null
  );
insert into @t2 values
  ('Яблоки', 'Зеленый'),
  ('Яблоки', 'Желтый'),
  ('Яблоки', 'Красный'),
  ('Яблоки', 'Красный'),
  ('Яблоки', 'Высший');
select t2.fruit, t2.sort, t1.[all]
from @t2 t2
left join @t1 t1 on t1.fruit=t2.fruit and t1.sort=t2.sort;


Результат ниже на скриншоте.
Соответственно, в гугле ищем:
https://www.google.com/search?q=c# linq left join
https://www.google.com/search?q=c# data table left join
...
Рейтинг: 0 / 0
Создание дубля строки в таблице
    #39828997
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему же аутер
...
Рейтинг: 0 / 0
Создание дубля строки в таблице
    #39829000
Spartak19
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сон Веры Павловны,
Спасибо за ответ, но я правда не совсем понимаю как это на VB.NET будет выглядеть
...
Рейтинг: 0 / 0
Создание дубля строки в таблице
    #39829003
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Spartak19Сон Веры Павловны,
Спасибо за ответ, но я правда не совсем понимаю как это на VB.NET будет выглядетьsqlCommand почитай
...
Рейтинг: 0 / 0
Создание дубля строки в таблице
    #39829025
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxПочему же аутер
Потому что внешнее, коим являются и left join, и right join, и full outer join. Left join и right join могут быть написаны со словом outer (left outer join, right outer join) - оно в даннм случае опционально, и может быть опущено.
...
Рейтинг: 0 / 0
25 сообщений из 36, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Создание дубля строки в таблице
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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