powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VB & SQL поменять местами значения
4 сообщений из 4, страница 1 из 1
VB & SQL поменять местами значения
    #38711647
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
С нужными своими дополнительными информационными полями и ICON обозначением вручную загрузил данные в ListView1.
База данных Access находится на сервере связь с которым по локальной сети. Без проблем заделал все нужные функции. Получилось также разшареные папки понимать как полный путь на сервере. И остальная деталь - поменять местами значения в базе данных. Я сделал это таким образом. С помощью кнопок Ctrl+вверх или Ctrl+вниз меняю местами значения в бд. Не стал задавать вопросы без попытки что-то сам сделать. У меня рабочий код. А вопрос: можно было как-то сделать это по проще одним замудренным каким-то запросом запросом SQL (поменять местами значения)?

Private Sub ListView1_KeyUp(KeyCode As Integer, Shift As Integer)
  If KeyCode = 46 Then
    Call Command12_Click
  End If
  If Shift = 2 Then
    If KeyCode = 38 Or KeyCode = 40 Then 'вверх або вниз
      Dim f As Long, k As Long, t1 As Long, t2 As Long, i2 As Long
      For f = 1 To ListView1.ListItems.Count
        If ListView1.ListItems(f).Selected = True Then
          If KeyCode = 38 Then
            If fSelectPBL = 1 Then Exit Sub
            If ListView1.ListItems.Count > 1 Then f = f + 1
          End If
          If KeyCode = 40 Then
            If fSelectPBL = ListView1.ListItems.Count Then Exit Sub
            If ListView1.ListItems.Count > 1 Then f = f - 1
          End If
          k = Val(Mid(ListView1.ListItems(f).Key, 2))
          Exit For
        End If
      Next f
      
      If KeyCode = 38 Then 'вверх
        If f > 1 Then
          Set BD_Tb1 = BD_B.OpenRecordset("SELECT * FROM VideoGr WHERE id=" & k, dbOpenDynaset)
          If Not BD_Tb1.EOF Then
            t1 = BD_Tb1("position")
            i2 = Val(Mid(ListView1.ListItems(f - 1).Key, 2))
            Set BD_Tb1 = BD_B.OpenRecordset("SELECT * FROM VideoGr WHERE id=" & i2, dbOpenDynaset)
            If Not BD_Tb1.EOF Then
              t2 = BD_Tb1("position")
              BD_B.Execute "UPDATE VideoGr SET position=" & t2 & " WHERE id=" & k
              BD_B.Execute "UPDATE VideoGr SET position=" & t1 & " WHERE id=" & i2
              If FiltrAct = 1 Then Command1_Click
              If FiltrAct = 2 Then Command7_Click
              If FiltrAct = 3 Then Command8_Click
              ListView1.ListItems(f - 1).Selected = True
            End If
          End If
        End If
      End If
      If KeyCode = 40 Then 'вниз
        If f < ListView1.ListItems.Count Then
          Set BD_Tb1 = BD_B.OpenRecordset("SELECT * FROM VideoGr WHERE id=" & k, dbOpenDynaset)
          If Not BD_Tb1.EOF Then
            t1 = BD_Tb1("position")
            i2 = Val(Mid(ListView1.ListItems(f + 1).Key, 2))
            Set BD_Tb1 = BD_B.OpenRecordset("SELECT * FROM VideoGr WHERE id=" & i2, dbOpenDynaset)
            If Not BD_Tb1.EOF Then
              t2 = BD_Tb1("position")
              BD_B.Execute "UPDATE VideoGr SET position=" & t2 & " WHERE id=" & k
              BD_B.Execute "UPDATE VideoGr SET position=" & t1 & " WHERE id=" & i2
              If FiltrAct = 1 Then Command1_Click
              If FiltrAct = 2 Then Command7_Click
              If FiltrAct = 3 Then Command8_Click
              ListView1.ListItems(f + 1).Selected = True
            End If
          End If
        End If
      End If
    End If
  End If
End Sub

...
Рейтинг: 0 / 0
VB & SQL поменять местами значения
    #38711649
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сори. неправильно оформил...
С нужными своими дополнительными информационными полями и ICON обозначением вручную загрузил данные в ListView1.
База данных Access находится на сервере связь с которым по локальной сети. Без проблем заделал все нужные функции. Получилось также разшареные папки понимать как полный путь на сервере. И остальная деталь - поменять местами значения в базе данных. Я сделал это таким образом. С помощью кнопок Ctrl+вверх или Ctrl+вниз меняю местами значения в бд. Не стал задавать вопросы без попытки что-то сам сделать. У меня рабочий код. А вопрос: можно было как-то сделать это по проще одним замудренным каким-то запросом запросом SQL (поменять местами значения)?


Код: vbnet
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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
Private Sub ListView1_KeyUp(KeyCode As Integer, Shift As Integer)
  If KeyCode = 46 Then
    Call Command12_Click
  End If
  If Shift = 2 Then
    If KeyCode = 38 Or KeyCode = 40 Then 'вверх або вниз
      Dim f As Long, k As Long, t1 As Long, t2 As Long, i2 As Long
      For f = 1 To ListView1.ListItems.Count
        If ListView1.ListItems(f).Selected = True Then
          If KeyCode = 38 Then
            If fSelectPBL = 1 Then Exit Sub
            If ListView1.ListItems.Count > 1 Then f = f + 1
          End If
          If KeyCode = 40 Then
            If fSelectPBL = ListView1.ListItems.Count Then Exit Sub
            If ListView1.ListItems.Count > 1 Then f = f - 1
          End If
          k = Val(Mid(ListView1.ListItems(f).Key, 2))
          Exit For
        End If
      Next f
      
      If KeyCode = 38 Then 'вверх
        If f > 1 Then
          Set BD_Tb1 = BD_B.OpenRecordset("SELECT * FROM VideoGr WHERE id=" & k, dbOpenDynaset)
          If Not BD_Tb1.EOF Then
            t1 = BD_Tb1("position")
            i2 = Val(Mid(ListView1.ListItems(f - 1).Key, 2))
            Set BD_Tb1 = BD_B.OpenRecordset("SELECT * FROM VideoGr WHERE id=" & i2, dbOpenDynaset)
            If Not BD_Tb1.EOF Then
              t2 = BD_Tb1("position")
              BD_B.Execute "UPDATE VideoGr SET position=" & t2 & " WHERE id=" & k
              BD_B.Execute "UPDATE VideoGr SET position=" & t1 & " WHERE id=" & i2
              If FiltrAct = 1 Then Command1_Click
              If FiltrAct = 2 Then Command7_Click
              If FiltrAct = 3 Then Command8_Click
              ListView1.ListItems(f - 1).Selected = True
            End If
          End If
        End If
      End If
      If KeyCode = 40 Then 'вниз
        If f < ListView1.ListItems.Count Then
          Set BD_Tb1 = BD_B.OpenRecordset("SELECT * FROM VideoGr WHERE id=" & k, dbOpenDynaset)
          If Not BD_Tb1.EOF Then
            t1 = BD_Tb1("position")
            i2 = Val(Mid(ListView1.ListItems(f + 1).Key, 2))
            Set BD_Tb1 = BD_B.OpenRecordset("SELECT * FROM VideoGr WHERE id=" & i2, dbOpenDynaset)
            If Not BD_Tb1.EOF Then
              t2 = BD_Tb1("position")
              BD_B.Execute "UPDATE VideoGr SET position=" & t2 & " WHERE id=" & k
              BD_B.Execute "UPDATE VideoGr SET position=" & t1 & " WHERE id=" & i2
              If FiltrAct = 1 Then Command1_Click
              If FiltrAct = 2 Then Command7_Click
              If FiltrAct = 3 Then Command8_Click
              ListView1.ListItems(f + 1).Selected = True
            End If
          End If
        End If
      End If
    End If
  End If
End Sub


...
Рейтинг: 0 / 0
VB & SQL поменять местами значения
    #38711654
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не стал разбирать твои замудреные Command837, Command913...
если хочешь, чтобы кому-то было интересно читать твой код - научить давать вменяемые названия контролам.
вроде ж не первый день программируешь, должно уже дойти, что такой подход - это фигурная стрельба себе в ногу.

========

По сути вопроса: правильно я понимаю, есть две записи (исходно известны их id) и нужно обменять в них местами значение одного и того же поля?
...
Рейтинг: 0 / 0
VB & SQL поменять местами значения
    #38711662
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей159А вопрос: можно было как-то сделать это по проще одним замудренным каким-то запросом запросом SQL (поменять местами значения)?ну вопрос по чистому SQL лучше задавать в соответствующем форуме, а не в VB, там ответят быстрее и чище.

Если очень хочется одним запросом, это будет выглядеть примерно так (допустим ID записей 25 и 30):
Код: sql
1.
2.
3.
4.
UPDATE MyTable
SET MyField=TSource.MyField
FROM MyTable
INNER JOIN MyTable TSource ON (MyTable.ID=25 AND TSource.ID=30) OR (MyTable.ID=30 AND TSource.ID=25)

могу немного ошибаться в синтаксисе Аксесса для Update, возможно нужно убрать строку FROM MyTable
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VB & SQL поменять местами значения
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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