我有一个包含多个列的表,其中一xml
列是一列.我没有在查询中使用的命名空间.对于所有记录,XML数据始终是相同的结构.
create table #temp (id int, name varchar(32), xml_data xml)
insert into #temp values
(1, 'one', '<data><info x="42" y="99">Red</info></data>'),
(2, 'two', '<data><info x="27" y="72">Blue</info></data>'),
(3, 'three', '<data><info x="16" y="51">Green</info></data>'),
(4, 'four', '<data><info x="12" y="37">Yellow</info></data>')
Run Code Online (Sandbox Code Playgroud)
Name Info.x Info.y Info
----- ------- ------- -------
one 42 99 Red
two 27 72 Blue
three 16 51 Green
four 12 37 Yellow
Run Code Online (Sandbox Code Playgroud)
select Name, xml_data.query('/data/info/.').value('.', 'varchar(10)') as [Info]
from #temp
Run Code Online (Sandbox Code Playgroud)
它返回Name
和Info
列.我无法弄清楚如何在不使用命名空间的情况下提取属性值.例如,以下查询返回错误:
select Name, xml_data.query('/data/info/@x') …
Run Code Online (Sandbox Code Playgroud) 我有这种模式的文件夹结构.我刚刚在每个子目录中显示了两个子目录和2个文件,但通常我在单个级别上有n个子目录,在它们下面有单个级别的文件(但可以是n个文件).
Directory master
subDirectory x:
file1
file2
Directory y:
file 3
file 4
Run Code Online (Sandbox Code Playgroud)
我需要创建一个Windows脚本,一个从主目录运行的批处理文件,并给我两个包含各自文件的zip文件x.zip和y.zip.
我知道我的脚本必须使用for和zip命令但我正在试图让它工作,因为我无法理解这些命令的语法和谷歌搜索似乎没有帮助.
我找到了这样的命令, for %f in ("*.*") do zip "%~nf.zip" "%f"
但它似乎只有在没有子文件夹的情况下才直接存在.
我正在使用Delphi XE2 Update 3. Update 4与我们的某些第三方组件不兼容,因此我们尚未更新.
我在我的应用程序中使用TImageList.我已经注意到很多次从源视图切换到窗体视图(F12)时,突然之前未修改的单元将被修改.如果我保存按F12导致的更改,我可以查看源代码控制并看到TImageList.Bitmap属性的几个字节已更改.这是TortoiseHg Workbench中的一个例子:
@@ -830,7 +830,7 @@
Left = 760
Top = 480
Bitmap = {
- 494C01010200E402E40210001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
+ 494C01010200E802E80210001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
^^ ^^ <-- two bytes changed
Run Code Online (Sandbox Code Playgroud)
有时会有其他微小的变化,但它总是仅限于TImageList.Bitmap数据中的几个孤立点.当我没有做出任何有意的改变时,不断将这些微不足道的变化推向源代码控制是一件非常痛苦的事情.
有谁知道为什么Delphi在源视图和表单视图之间切换时更改TImageList.Bitmap数据?有没有办法解决这个限制?
我们构建了一个使用包和组件的应用程序.当我们调试应用程序时,IDE中的"事件日志"通常会显示我们的BPL正在加载而没有调试信息("无调试信息").这没有意义,因为我们所有的包和EXE都是使用debug构建的.
_(each project) | Options | Compiling_
[ x ] Assertions
[ x ] Debug information
[ x ] Local symbols
Symbol reference info = "Reference info"
[ ] Use debug .dcus
[ x ] Use imported data references
_(each project) | Options | Linking_
[ x ] Debug information
Map file = Detailed
Run Code Online (Sandbox Code Playgroud)
我们有4个项目,都是使用运行时pacakges构建的:
观察到的问题
1)我们多次调试时,Components.bpl加载了调试信息,但"Local Variables"窗口中的所有值都是空白的.如果将鼠标悬停在代码中的变量上,则没有弹出窗口,"评估"窗口也不显示任何内容("结果"窗格始终为空白).
2)有时事件日志显示各种BPL的"无调试信息".例如,如果我们激活Plugin.bpl项目并设置它的Run | 将参数的主机应用程序作为MainApp.exe,然后按F9,除Plugin.bpl模块外,所有模块似乎都加载"Has Debug Info".加载时,事件日志显示"无调试信息".但是,如果我们关闭应用程序并立即按F9,它将再次运行它而不重新编译任何东西,这次Plugin.bpl加载了调试("有调试信息").
问题
1)什么会导致"局部变量"窗口不显示值?
2)当BPL符合调试并且所有调试文件(dcu,map等)都可用时,为什么BPL有时会在没有调试信息的情况下加载?
当光标位于空行并且没有选择时,Visual Studio 2010中有一个设置可以关闭复制和剪切命令.但是,当光标不在空白行并按ctrl + C时,它总是将整行复制到剪贴板.我觉得这很烦人,因为我总是首先突出显示它,复制它,然后将光标放在我要粘贴的位置,然后按ctrl + V. 但是,有时我会错过v并点击c,它用当前行的文本替换剪贴板上的文本,我必须从头开始...
有没有人知道如果没有选择就关闭复制,无论光标是否在空白行?
我有一个可变大小的XML文档,需要在MSSQL 2008 R2上解析,如下所示:
<data item_id_type="1" cfgid="{4F5BBD5E-72ED-4201-B741-F6C8CC89D8EB}" has_data_event="False">
<item name="1">
<field id="{EA032B25-19F1-4C1B-BDDE-3113542D13A5}" type="2">0.506543009706267</field>
<field id="{71014ACB-571B-4C72-9C9B-05458B11335F}" type="2">-0.79500402346138</field>
<field id="{740C36E9-1988-413E-A1D5-B3E5B4405B45}" type="2">0.0152649050024924</field>
</item>
<item name="2">
<field id="{EA032B25-19F1-4C1B-BDDE-3113542D13A5}" type="2">0.366096802804087</field>
<field id="{71014ACB-571B-4C72-9C9B-05458B11335F}" type="2">-0.386642801354842</field>
<field id="{740C36E9-1988-413E-A1D5-B3E5B4405B45}" type="2">0.031671174184115</field>
</item>
</data>
Run Code Online (Sandbox Code Playgroud)
.
我需要将其转换为常规表类型数据集,如下所示:
item_name field_id field_type field_value
--------- ------------------------------------ ----------- ---------------
1 EA032B25-19F1-4C1B-BDDE-3113542D13A5 2 0.5065430097062
1 71014ACB-571B-4C72-9C9B-05458B11335F 2 -0.795004023461
1 740C36E9-1988-413E-A1D5-B3E5B4405B45 2 0.0152649050024
2 EA032B25-19F1-4C1B-BDDE-3113542D13A5 2 0.3660968028040
2 71014ACB-571B-4C72-9C9B-05458B11335F 2 -0.386642801354
2 740C36E9-1988-413E-A1D5-B3E5B4405B45 2 0.0316711741841
3 EA032B25-19F1-4C1B-BDDE-3113542D13A5 2 0.8839620369590
3 71014ACB-571B-4C72-9C9B-05458B11335F 2 -0.781459993268
3 740C36E9-1988-413E-A1D5-B3E5B4405B45 2 0.2284423515729 …
Run Code Online (Sandbox Code Playgroud) sql-server performance sqlxml sql-server-2008-r2 cross-apply
我正在使用 Delphi XE2(更新 3)和 GR32。我无法用于TBitmap32.LoadFromStream()
加载图像数据。它引发以下异常:
Project MyApp.exe raised exception class EInvalidGraphic with message 'Bitmap image is not valid'.
Run Code Online (Sandbox Code Playgroud)
uses GR32, GifImg, PngImage, Vcl.Graphics;
var
pic: TBitmap32;
bs: TBytesStream;
begin
bs := TBytesStream.Create(TClientDataSet(cds).FieldByName('filedata').AsBytes);
try
pic := TBitmap32.Create;
try
// bs.SaveToFile('c:\delme.png');
// pic.LoadFromFile('c:\delme.png');
pic.LoadFromStream(bs); // <- EInvalidGraphic exception
// do something with 'pic'
finally
FreeAndNil(pic);
end;
finally
FreeAndNil(bs);
end;
end;
Run Code Online (Sandbox Code Playgroud)
如果我对LoadFromStream()
代码进行注释并取消对前两行的注释,它就会起作用——因此它能够在从文件加载图像时确定图像格式。在此示例中,bs
包含有效的 PNG 图像。但是,有时它可能是 GIF、JPG、BMP 或其他图形格式。
我也知道我可以使用一个中间对象(例如,TPNGImage
,TJPEGImage
等),加载使用图像数据LoadFromStream()
向中间对象,然后Assign()
它向 …
我正在使用Windows XE2,TVirtualStringTree
和TComboBox
作为内置编辑器.
当我TComboBox
直接在表单上放置时,在运行时我可以下拉列表,鼠标滚轮可以上下滚动列表中的项目(根据需要).但是,当TComboBox
在运行时通过TVirtualStringTree
就地编辑器创建时,即使新创建的组合框具有焦点,鼠标滚轮的WM_MOUSEWHEEL
消息也会发送到树控件而不是组合框.
这很明显,因为组合框下拉列表中的项目不会滚动.相反,组合框后面的树控件滚动.组合框的固定部分随树一起移动,但下拉列表与组合框的固定部分断开连接并且不移动(如图所示).
在这两种情况下TComboBox.Style
都设置为csDropDownList
.当组合框创建为树的就地编辑器时,它以这种方式完成:
FCBox := TComboBox.Create(TreeControl);
FCBox.Visible := False;
FCBox.Parent := TreeControl;
// ... add items to combo box ...
FCBox.Visible := True;
FCBox.SetFocus;
FCBox.DroppedDown := True;
Run Code Online (Sandbox Code Playgroud)
鼠标在哪里悬停并不重要.它可以直接在组合框下拉列表中的项目上,并且后台中的树控件仍然是滚动的树控件.滚动组合框中项目的唯一方法是使用其滚动条.
什么会导致聚焦控件的父级接收鼠标滚轮消息而不是控件本身(在这种情况下,TComboBox
)?
我正在使用Delphi XE2 Update 3.即使是最简单的浮点数(如3.7)也存在精度问题.鉴于此代码(32位控制台应用程序):
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses System.SysUtils;
var s: Single; d: Double; x: Extended;
begin
Write('Size of Single ----- '); Writeln(SizeOf(Single));
Write('Size of Double ----- '); Writeln(SizeOf(Double));
Write('Size of Extended --- '); Writeln(SizeOf(Extended)); Writeln;
s := 3.7; d := 3.7; x := 3.7;
Write('"s" is '); Writeln(s);
Write('"d" is '); Writeln(d);
Write('"x" is '); Writeln(x); Writeln;
Writeln('Single Comparison');
Write('"s > 3.7" is '); Writeln(s > 3.7);
Write('"s = 3.7" is '); Writeln(s = …
Run Code Online (Sandbox Code Playgroud) 我正在使用Delphi XE2.我的代码从SQL-Server 2008 R2数据库中提取数据.返回的数据是一个nvarchar(max)
包含1,055,227字节数据的字段.我使用以下代码将字段数据保存到文件:
procedure WriteFieldToFile(FieldName: string; Query: TSQLQuery);
var
ss: TStringStream;
begin
ss := TStringStream.Create;
try
ss.WriteString(Query.FieldByName(FieldName).AsString);
ss.Position := 0;
ss.SaveToFile('C:\Test.txt');
finally
FreeAndNil(ss);
end;
end;
Run Code Online (Sandbox Code Playgroud)
当我在十六进制查看器中检查文件时,第一个524,287字节(正好是1/2兆字节)看起来是正确的.剩余的字节(524,288到1,055,227)都是空值(#0),而不是原始数据.
这是将字符串字段从a保存TSQLQuery
到文件的正确方法吗?我选择使用TStringStream
因为我最终会添加代码来对流上的数据做其他事情,这是我无法做到的TFileStream
.
我只是好奇为什么你可以删除一个TSQLConnection
表单,它将添加Left
和Top
属性.dfm
:
object Form1: TForm1
...
object SQLConnection1: TSQLConnection
Left = 8
Top = 8
end
end
Run Code Online (Sandbox Code Playgroud)
但是当您在代码中创建它时,Left
和Top
属性不是TSQLConnection
该类的成员:
interface
type
TForm1 = class(TForm)
SQLConnection1: TSQLConnection;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
FSQLCon: TSQLConnection;
public
{ Public declarations }
end;
implementation
procedure TForm1.FormCreate(Sender: TObject);
begin
FSQLCon := TSQLConnection.Create(Self);
FSQLCon.Left := 280;
FSQLCon.Top := 200;
end;
Run Code Online (Sandbox Code Playgroud)
编译:
[DCC Error] Unit1.pas(30): E2003 Undeclared identifier: 'Left'
[DCC Error] Unit1.pas(31): …
Run Code Online (Sandbox Code Playgroud) 我使用以下方法来移动和操纵AnsiString
.它大部分时间都有效,但有时指向字符串的指针退出运行.给出以下代码:
var
s: AnsiString;
p: PAnsiChar;
offset, idx, cnt: Integer;
begin
s := 'some>very>long>string>with>field>delimiters>';
p := @s[1];
offset := 1;
// find the 5th field
cnt := 5;
repeat
idx := AnsiString.AnsiPos('>', p);
Inc(p, idx);
Inc(offset, idx);
Dec(cnt);
until cnt = 0;
// insert a new field after the 5th field
Insert(AnsiString('something new>'), s, offset);
// skip other fields
// insert other values
// repeat
end;
Run Code Online (Sandbox Code Playgroud)
调试时,在repeat..until
循环结束后,您可以查看检查器并查看p = 'field>delimiters>'
.在之后Insert()
的语句,s = 'some>very>long>string>with>something …
delphi ×8
delphi-xe2 ×5
ansistring ×1
batch-file ×1
bpl ×1
components ×1
copy-paste ×1
cross-apply ×1
debugging ×1
graphics32 ×1
mousewheel ×1
packages ×1
performance ×1
pointers ×1
runtime ×1
sql-server ×1
sqlxml ×1
stream ×1
timagelist ×1
windows ×1