0

我有一个包含以下字段的 sqlite 表:

Langauge      level       hours
German      2           50
French      3           40
English    1           60
German      1           10
English    2           50
English    3           60
German      1           20
French      2           40

我想根据语言和其他条件遍历记录,然后将当前选择的记录传递给不同的函数。所以我有以下实际代码和伪代码的混合。请帮助我将伪代码转换为实际代码。我发现这样做很难。

这是我所拥有的:

Private sub mainp()
   Dim oslcConnection As New SQLite.SQLiteConnection
   Dim oslcCommand As SQLite.SQLiteCommand
   Dim langs() As String = {"German", "French", "English"}
   Dim i as Integer = 0
   oslcConnection.ConnectionString = "Data Source=" & My.Settings.dbFullPath & ";"
   oslcConnection.Open()
   oslcCommand = oslcConnection.CreateCommand
   Do While i <= langs.count
    If langs(i) = "German" Then
      oslcCommand.CommandText = "SELECT * FROM table WHERE language = '" & langs(i) & "';"
      For each record selected             'psudo code
         If level = 1 Then                 'psudo code
            update level to 2              'psudo code
            minorp(currentRecord)          'psudo code: calling minorp function and passing the whole record as a parameter
         End If                            'psudo code
         If level = 2 Then                 'psudo code
            update level to 3              'psudo code
            minorp(currentRecord)          'psudo code: calling minorp function and passing the whole record as a parameter
         End If                            'psudo code
      Next                                 'psudo code
    End If

    If langs(i) = "French" Then
      oslcCommand.CommandText = "SELECT * FROM table WHERE language = '" & langs(i) & "';"
      For each record selected             'psudo code
         If level = 1 Then                 'psudo code
            update level to 2              'psudo code
            minorp(currentRecord)          'psudo code: calling minorp function and passing the whole record as a parameter
         End If                            'psudo code
         If level = 2 Then                 'psudo code
            update level to 3              'psudo code
            minorp(currentRecord)          'psudo code: calling minorp function and passing the whole record as a parameter
         End If                            'psudo code
      Next                                 'psudo code
    End If
Loop 
End Sub

非常感谢您的帮助。

4

3 回答 3

1

数据表有一个 DataRow 对象,您可以将其传递给您的函数。

于 2010-06-05T06:25:51.483 回答
0

我建议你创建一个类,例如

public class LanguageCourse

   'Prob better to make these properties
   public Language as string
   public Level as integer
   public Hours as integer

   public sub new(language as string, level as integer, hours as integer)
     Language = language
     Level = level
     Hours  = hours
   end sub

end class

您上面的代码可能会变成以下内容:

Private sub mainp()
   Dim oslcConnection As New SQLite.SQLiteConnection
   Dim oslcCommand As SQLite.SQLiteCommand
   Dim langs() As String = {"German", "French", "English"}
   Dim i as Integer = 0
   oslcConnection.ConnectionString = "Data Source=" & My.Settings.dbFullPath & ";"
   oslcConnection.Open()
   oslcCommand = oslcConnection.CreateCommand

  'Not sure why you were looping round these like this.  It's also not a great idea to 
  'build up your sql queries by concactenating strings, better to parameteris them, but
  'seeing as how this seems to be hard coded anyway, better even like this:

      dim course as LanguageCourse

      oslcCommand.CommandText = "SELECT * FROM table WHERE language IN ("German", "French", "English");"
      For each record selected             'psudo code

         course = new LanguageCourse(record.language, record.level, record.hours)

         'This function should handle your update as you just seem to be adding one to
         'something, for certain criteria.
         minorp(course)

      Next                                 'psudo code


End Sub

请注意,这仍然是伪代码,因为这不会编译:)

于 2010-06-05T06:42:25.553 回答
0

我建议您将此逻辑移至数据库。SQL 可以执行这些检查并通过带有 where 子句的更新语句更新数据。

于 2010-06-07T16:50:04.233 回答