Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Создание дубля строки в таблице / 25 сообщений из 36, страница 1 из 2
17.06.2019, 23:45
    #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
18.06.2019, 05:50
    #39827501
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание дубля строки в таблице
Spartak19посмотрите что не так
Всё не так. Такие вещи делаются на сервере, скриптом или внутри ХП, в одной транзакции.
...
Рейтинг: 0 / 0
18.06.2019, 07:34
    #39827509
Spartak19
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание дубля строки в таблице
Сон Веры Павловны, Путь решения в данном случае только через Datatable, если можете, подскажите как организовать верный цикл проверки
...
Рейтинг: 0 / 0
18.06.2019, 08:35
    #39827525
vb_sub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание дубля строки в таблице
Spartak19,
попробуйте через LINQ.
...
Рейтинг: 0 / 0
18.06.2019, 18:14
    #39827907
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание дубля строки в таблице
vb_subSpartak19,
попробуйте через LINQ.
С тем же успехом можно посоветовать через циклы
...
Рейтинг: 0 / 0
18.06.2019, 18:21
    #39827911
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание дубля строки в таблице
Spartak19,

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

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


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

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

зачем делать конкатенацию 2 полей, если можно хранить структуру из 2 полей в виде ключа справочника?в диктионари? У меня не получалось, но я глубоко не рыл
...
Рейтинг: 0 / 0
19.06.2019, 15:05
    #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
19.06.2019, 17:06
    #39828503
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание дубля строки в таблице
Вообще-то у ТС VBA
...
Рейтинг: 0 / 0
19.06.2019, 17:28
    #39828514
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание дубля строки в таблице
andreymxВообще-то у ТС VBA
часом не перепутал VB.NET с VBA?
...
Рейтинг: 0 / 0
19.06.2019, 17:40
    #39828521
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание дубля строки в таблице
ИзопропилandreymxВообще-то у ТС VBA
часом не перепутал VB.NET с VBA?сорри, возможно
...
Рейтинг: 0 / 0
20.06.2019, 23:01
    #39828963
Spartak19
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание дубля строки в таблице
Что примерно должно получится, подскажите как это реализовать через цикл или есть более правильный способ
...
Рейтинг: 0 / 0
20.06.2019, 23:06
    #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
20.06.2019, 23:08
    #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
21.06.2019, 06:07
    #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
21.06.2019, 07:32
    #39828997
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание дубля строки в таблице
Почему же аутер
...
Рейтинг: 0 / 0
21.06.2019, 07:42
    #39829000
Spartak19
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание дубля строки в таблице
Сон Веры Павловны,
Спасибо за ответ, но я правда не совсем понимаю как это на VB.NET будет выглядеть
...
Рейтинг: 0 / 0
21.06.2019, 07:57
    #39829003
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание дубля строки в таблице
Spartak19Сон Веры Павловны,
Спасибо за ответ, но я правда не совсем понимаю как это на VB.NET будет выглядетьsqlCommand почитай
...
Рейтинг: 0 / 0
21.06.2019, 09:22
    #39829025
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание дубля строки в таблице
andreymxПочему же аутер
Потому что внешнее, коим являются и left join, и right join, и full outer join. Left join и right join могут быть написаны со словом outer (left outer join, right outer join) - оно в даннм случае опционально, и может быть опущено.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Создание дубля строки в таблице / 25 сообщений из 36, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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