↑の方ではテーブルの構造をコピーしたので今度はデータをコピーするプログラム。
'データベースA→データリーダーに読み込み→データベースBに書き込み
ConnectionString = "Data Source=.\sqlexpress;Initial Catalog=DATABASE.MDF;Integrated Security=SSPI;"
ConnectionString2 = "Data Source=(local);Initial Catalog=AoM;Integrated Security=SSPI;"
SQL = "Select * From " & TableName
conn = New SqlConnection(ConnectionString)
conn2 = New SqlConnection(ConnectionString2)
cmd = New SqlCommand(SQL, conn)
conn.Open()
DR = cmd.ExecuteReader
DR.Read()
schemaTable = DR.GetSchemaTable()
SS = ""
Dim i As Integer
'For Each myRow In schemaTable.Rows
' SQL2 = "Insert into " & TableName & "("
' For Each myCol In schemaTable.Columns
' 'SS = SS & myCol.ColumnName & " = " & myRow(myCol).ToString() & "<br>"
' Next
' 'SS += "----------------------------------------------" & "<br>"
'Next
Dim SQL2b As String
'While DR.Read 'WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW'いったんリードしてるのでここではリードしない
Do
SQL2 = "Insert into " & TableName & "("
SQL2b = ") Values ("
For i = 0 To DR.FieldCount - 1
If Not i = 0 Then
SQL2 += ","
SQL2b += ","
End If
SQL2 += "[" & DR.GetName(i) & "]"
'文字列は' 'で囲むので列のタイプがわからないといけない。
schemaTable = DR.GetSchemaTable()
For Each myRow In schemaTable.Rows
For Each myCol In schemaTable.Columns
If myCol.ColumnName = "DataType" Then
If myRow(myCol.ColumnName).ToString = "System.DateTime" Or myRow(myCol.ColumnName).ToString = "System.String" Then
If Not IsDBNull(DR(i)) Then
SQL2b += "'" & DR(i) & "'"
Else
SQL2b += "Null"
End If
End If
GoTo LandB
End If
Next
Next
LandB:
' If schemaTable.Rows(DR.GetName(i))("DataType") Then
'SQL2b += schemaTable.Rows(0)("DataType").ToString
Next
'GoTo LandA
SQL2 += SQL2b & ")"
cmd2 = New SqlCommand(SQL2, conn2)
conn2.Open()
num2 = cmd2.ExecuteNonQuery
conn2.Close()
'End While 'WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
Loop While DR.Read
' GridView5.DataSource = DR
' GridView5.DataBind()
LandA:
DR.Close()
conn.Close()
Label3.Text = SQL2
Dim LinkLove As LinkLabel = New LinkLabel
LinkLove.Name = "LinkLove" & i
LinkLove.AutoSize = True
LinkLove.Text = S2(0)
If i = 1 Then 'HHHHHHHHHHHHHHHHHHHHHH
PX = 0 : PY = 0
Else 'HHHHHHHHHHHHHHHHHHHHHH
Dim o As Object
Dim LB As LinkLabel
For Each o In Me.Controls 'DDDDDDDDDDDDDDDDD
If o.Name = "LinkLove" & i - 1 Then
'CType
LB = CType(o, LinkLabel)
PX = 0
PY = LB.Location.Y + LB.Height
End If 'HHHHHHHHHHHHHHHHHHHHHH
Next 'DDDDDDDDDDDDDDDDD
End If
LinkLove.Location = New Point(PX, PY)
'→エラー'Form1.Controls.Add(LinkLove)'↓Form1でなくMeキーワードを使う
Me.Controls.Add(LinkLove)
'LinkLove.Visible = True
'ListBox2.Items.Add(FileString)
AddHandler LinkLove.LinkClicked, AddressOf LinkLove_LinkClicked
しかし、あるファイルのみをコピーしたいなど細かい制御が必要な場合は
やはりファイルを1コずつ扱うのだ。
-----------------------------------
Dim Moto As String
Dim Saki As String
Moto = "コピー元ディレクトリ"
Saki = "コピー先ディレクトリ"
Dim di As New DirectoryInfo(Moto)
Dim fi As FileInfo() = di.GetFiles()
Dim fiTemp As FileInfo
For Each fiTemp In fi
My.Computer.FileSystem.CopyFile(Moto & "\" & fiTemp.Name, Saki & "\" & fiTemp.Name, True)
Next fiTemp
Process.Startという便利なメソッドがある。
便利だが、単にProcess.Start("http://〜")でサイトを開くとすでに開いているウィンドウに新たなページが表示されてしまう。
新しいウィンドウにページを表示したくば次のようにするのだ。
Dim URL As String
Dim i As Integer
Try
i = ListBox1.SelectedIndex
URL = URLDt.Rows(i)("URL")
Dim myProcess As New ProcessStartInfo
myProcess.FileName = BrowserPath
myProcess.Arguments = URL
myProcess.CreateNoWindow = False
myProcess.UseShellExecute = False
myProcess.Verb = "open"
Process.Start(myProcess)
Catch
String 関数
類似 Space 関数
必要条件
バージョン 1
指定した繰り返し回数を使用して文字列を返します。
String(number, character)
引数
number
文字をいくつ並べるのかを指定します。引数 number に Null 値が含まれる場合は、Null 値を返します。
character
文字の文字コードまたは文字列式を指定します。この文字列の先頭文字を number 回繰り返した値を返します。引数 character に Null 値が含まれる場合は、Null 値を返します。
解説
引数 character に 256 以上の数値を指定すると、String 関数では次の式を使って数値を有効な文字コードに変換します。
character Mod 256
次のコードは、String 関数を使って指定された文字数だけ並べた文字列を返す例です。
Visual Basic コードのコピー
Public Sub CreateMyForm()
' Create a new instance of the form.
Dim form1 As New Form()
' Create two buttons to use as the accept and cancel buttons.
Dim button1 As New Button()
Dim button2 As New Button()
' Set the text of button1 to "OK".
button1.Text = "OK"
' Set the position of the button on the form.
button1.Location = New Point(10, 10)
' Set the text of button2 to "Cancel".
button2.Text = "Cancel"
' Set the position of the button based on the location of button1.
button2.Location = _
New Point(button1.Left, button1.Height + button1.Top + 10)
' Set the caption bar text of the form.
form1.Text = "My Dialog Box"
' Display a help button on the form.
form1.HelpButton = True
' Define the border style of the form to a dialog box.
form1.FormBorderStyle = FormBorderStyle.FixedDialog
' Set the MaximizeBox to false to remove the maximize box.
form1.MaximizeBox = False
' Set the MinimizeBox to false to remove the minimize box.
form1.MinimizeBox = False
' Set the accept button of the form to button1.
form1.AcceptButton = button1
' Set the cancel button of the form to button2.
form1.CancelButton = button2
' Set the start position of the form to the center of the screen.
form1.StartPosition = FormStartPosition.CenterScreen
' Add button1 to the form.
form1.Controls.Add(button1)
' Add button2 to the form.
form1.Controls.Add(button2)
' Display the form as a modal dialog box.
form1.ShowDialog()
End Sub
Dim hProcesses As System.Diagnostics.Process() = System.Diagnostics.Process.GetProcessesByName("notepad") '大文字のNotepadでも機能する
Dim hProcess As System.Diagnostics.Process
For Each hprocess In hProcesses
hProcess.Kill()
Next hProcess
−−−−−−−−−−−−−−−−−−−−−−−−−−
ウィンドウズアクセサリのnotepad.exeを起動するといくつ起動してもすべてnotepadというプロセスネイムなのですべてのメモ帳を終了することができる。
特定のメモ帳だけを制御したいばあいはプロセスIDを採用する。
ByVal e As System.EventArgs) Handles Button3.Click
'指定のExcelファイルを起動しているExcel.EXEを探し終了させる
Dim localByName As Process() = Process.GetProcessesByName("Excel")
Dim p As Process
Dim fn As String = "Microsoft Excel - " & "Test.xls"
'起動中のExcelを取得
For Each p In localByName
'指定のファイル名(Test.xls)で起動中のExcelがあれば終了する
If System.String.Compare(p.MainWindowTitle, fn, True) = 0 Then
'指定のウィンドウにクローズ メッセージを送信して、プロセスを終了
p.CloseMainWindow()
End If
Next
Private Sub MainForm_Load(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles MyBase.Load
Dim txtBox As New TextBox()
txtBox.Location = New System.Drawing.Point(100, 100)
txtBox.Size = New System.Drawing.Size(50, 20)
Me.Controls.Add(txtBox)
txtBox.Show()
End Sub
--------------------------------------------------------------------------------
Say 2002/11/26(火) 22:19:01
VB6ならZOrderで変更できますが、
VB.Netではできませんか?
データテーブル、データカラム、データロー
Dim Dt As New DataTable("iR")
Dim colInt32 As DataColumn = New DataColumn("iR")
colInt32.DataType = System.Type.GetType("System.Int32") 'String型だとソートすると1<16<8とかになる
Dt.Columns.Add(colInt32)
Dim NewRow As DataRow = Dt.NewRow
NewRow("iR") = iR
Dt.Rows.Add(NewRow)
Dim WaitTime As Single
Dim FirstTime As Single
Dim NowTime As Single
WaitTime = 0.1
FirstTime = VB.Timer()
Do
NowTime = VB.Timer()
App.DoEvents()
Loop While (NowTime - FirstTime) >= 0 And (NowTime - FirstTime < WaitTime)